2026-06-08 14:31:31 +07:00
|
|
|
|
namespace QWERTYkez.ExcelProcessor;
|
2026-06-05 15:58:03 +07:00
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Внутренняя реализация <see cref="IBook"/>, которая делегирует вызовы к <see cref="ExcelWriter"/>.
|
|
|
|
|
|
/// Используется в ситуациях, когда требуется отдельный объект книги (например, в <see cref="IExcelWriter.Edit"/>).
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
internal sealed class ExcelBook : IBook
|
|
|
|
|
|
{
|
|
|
|
|
|
internal readonly ExcelWriter Writer;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Инициализирует обёртку книги.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
/// <param name="writer">Реальный процессор Excel (реализует IBook).</param>
|
|
|
|
|
|
internal ExcelBook(ExcelWriter writer)
|
|
|
|
|
|
{
|
|
|
|
|
|
Writer = writer;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
|
public IReadOnlyList<ISheet> GetSheets() => Writer.GetSheets();
|
|
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
2026-07-21 16:43:59 +07:00
|
|
|
|
public ISheet? Sheet(string name) => Writer.Sheet(name.EscapeSymbols());
|
2026-06-05 15:58:03 +07:00
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
2026-07-21 16:43:59 +07:00
|
|
|
|
public bool TryGetSheet(string name, out ISheet sheet) => Writer.TryGetSheet(name.EscapeSymbols(), out sheet);
|
2026-06-05 15:58:03 +07:00
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
2026-07-21 16:43:59 +07:00
|
|
|
|
public bool TryAddSheet(string name, Action<ISheet>? edit = null) => Writer.TryAddSheet(name.EscapeSymbols(), edit);
|
2026-06-05 15:58:03 +07:00
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
2026-07-21 16:43:59 +07:00
|
|
|
|
public bool TryRemoveSheet(string name) => Writer.TryRemoveSheet(name.EscapeSymbols());
|
2026-06-05 15:58:03 +07:00
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
|
public bool TryRemoveSheet(ISheet sheet) => Writer.TryRemoveSheet(sheet);
|
|
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
|
public IReadOnlyList<NumberFormatPattern> GetNumberFormats() => Writer.GetNumberFormats();
|
|
|
|
|
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
|
public NumberFormatPattern CreateNumberFormat(string format) => Writer.CreateNumberFormat(format);
|
2026-07-21 16:43:59 +07:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
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();
|
|
|
|
|
|
}
|
2026-06-05 15:58:03 +07:00
|
|
|
|
}
|