61 lines
2.1 KiB
C#
61 lines
2.1 KiB
C#
namespace QWERTYkez.ExcelProcessor;
|
||
|
||
/// <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 />
|
||
public ISheet? Sheet(string name) => Writer.Sheet(name.EscapeSymbols());
|
||
|
||
/// <inheritdoc />
|
||
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.EscapeSymbols(), edit);
|
||
|
||
/// <inheritdoc />
|
||
public bool TryRemoveSheet(string name) => Writer.TryRemoveSheet(name.EscapeSymbols());
|
||
|
||
/// <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);
|
||
}
|
||
|
||
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();
|
||
}
|
||
} |