26.07.21
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user