This commit is contained in:
melekhin
2026-07-21 16:43:59 +07:00
parent 5302edfb8f
commit 1dcb22e1d5
8 changed files with 306 additions and 126 deletions
+22 -4
View File
@@ -21,16 +21,16 @@ internal sealed class ExcelBook : IBook
public IReadOnlyList<ISheet> GetSheets() => Writer.GetSheets();
/// <inheritdoc />
public ISheet? Sheet(string name) => Writer.Sheet(name);
public ISheet? Sheet(string name) => Writer.Sheet(name.EscapeSymbols());
/// <inheritdoc />
public bool TryGetSheet(string name, out ISheet sheet) => Writer.TryGetSheet(name, out sheet);
public bool TryGetSheet(string name, out ISheet sheet) => Writer.TryGetSheet(name.EscapeSymbols(), out sheet);
/// <inheritdoc />
public bool TryAddSheet(string name, Action<ISheet>? edit = null) => Writer.TryAddSheet(name, edit);
public bool TryAddSheet(string name, Action<ISheet>? edit = null) => Writer.TryAddSheet(name.EscapeSymbols(), edit);
/// <inheritdoc />
public bool TryRemoveSheet(string name) => Writer.TryRemoveSheet(name);
public bool TryRemoveSheet(string name) => Writer.TryRemoveSheet(name.EscapeSymbols());
/// <inheritdoc />
public bool TryRemoveSheet(ISheet sheet) => Writer.TryRemoveSheet(sheet);
@@ -40,4 +40,22 @@ internal sealed class ExcelBook : IBook
/// <inheritdoc />
public NumberFormatPattern CreateNumberFormat(string format) => Writer.CreateNumberFormat(format);
}
public static class EscapeExt
{
public static string EscapeSymbols(this string source)
{
var sb = new StringBuilder(source);
sb.Replace('/', '');
sb.Replace('\\', '');
sb.Replace('*', '');
sb.Replace('?', '');
sb.Replace(':', '˸');
sb.Replace('[', '');
sb.Replace(']', '');
return sb.ToString();
}
}
@@ -33,7 +33,7 @@ internal sealed class ExcelSheet : ISheet
{
if (string.IsNullOrEmpty(name)) return false;
Book.ThrowIfDisposed();
SheetElement.Name = name;
SheetElement.Name = name.EscapeSymbols();
return true;
}
+6 -2
View File
@@ -1095,6 +1095,8 @@ internal sealed class ExcelWriter : ExcelReader, IExcelReader, IExcelWriter
if (string.IsNullOrEmpty(name))
return null;
name = name.EscapeSymbols();
lock (_syncLock)
{
var workbookPart = _doc.WorkbookPart;
@@ -1113,7 +1115,7 @@ internal sealed class ExcelWriter : ExcelReader, IExcelReader, IExcelWriter
/// <inheritdoc />
public bool TryGetSheet(string name, out ISheet sheet)
{
sheet = Sheet(name)!;
sheet = Sheet(name.EscapeSymbols())!;
return sheet != null;
}
@@ -1130,6 +1132,8 @@ internal sealed class ExcelWriter : ExcelReader, IExcelReader, IExcelWriter
if (workbookPart?.Workbook?.Sheets == null)
return false;
name = name.EscapeSymbols();
// Проверка уникальности имени
foreach (Sheet s in workbookPart.Workbook.Sheets.Elements<Sheet>())
{
@@ -1168,7 +1172,7 @@ internal sealed class ExcelWriter : ExcelReader, IExcelReader, IExcelWriter
/// <inheritdoc />
public bool TryRemoveSheet(string name)
{
var sheet = Sheet(name);
var sheet = Sheet(name.EscapeSymbols());
return sheet != null && TryRemoveSheet(sheet);
}