namespace QWERTYkez.ExcelProcessor;
///
/// Внутренняя реализация , которая делегирует вызовы к .
/// Используется в ситуациях, когда требуется отдельный объект книги (например, в ).
///
internal sealed class ExcelBook : IBook
{
internal readonly ExcelWriter Writer;
///
/// Инициализирует обёртку книги.
///
/// Реальный процессор Excel (реализует IBook).
internal ExcelBook(ExcelWriter writer)
{
Writer = writer;
}
///
public IReadOnlyList GetSheets() => Writer.GetSheets();
///
public ISheet? Sheet(string name) => Writer.Sheet(name.EscapeSymbols());
///
public bool TryGetSheet(string name, out ISheet sheet) => Writer.TryGetSheet(name.EscapeSymbols(), out sheet);
///
public bool TryAddSheet(string name, Action? edit = null) => Writer.TryAddSheet(name.EscapeSymbols(), edit);
///
public bool TryRemoveSheet(string name) => Writer.TryRemoveSheet(name.EscapeSymbols());
///
public bool TryRemoveSheet(ISheet sheet) => Writer.TryRemoveSheet(sheet);
///
public IReadOnlyList GetNumberFormats() => Writer.GetNumberFormats();
///
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();
}
}