0.9.1
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
internal static class CellAddressHelper
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Определяет выравнивание содержимого ячейки: горизонтальное, вертикальное, перенос текста и уменьшение по размеру.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Определяет границы ячейки: верхнюю, нижнюю, левую, правую и диагональные.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Определяет заливку (фон) ячейки.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Определяет шрифтовое оформление всей ячейки: размер, семейство, цвет, начертание.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors
|
||||
namespace QWERTYkez.ExcelProcessor
|
||||
{
|
||||
/// <summary>
|
||||
/// Представляет ширину столбца в Excel. Поддерживает задание в символах, пунктах, сантиметрах и миллиметрах.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
public readonly struct ExColor(System.Drawing.Color? Color)
|
||||
{
|
||||
@@ -59,4 +59,24 @@ public readonly struct ExColor(System.Drawing.Color? Color)
|
||||
}
|
||||
return excelColor;
|
||||
}
|
||||
|
||||
public static ExColor FromRgb(string rgb)
|
||||
{
|
||||
if (string.IsNullOrEmpty(rgb)) return new ExColor(null);
|
||||
if (rgb.Length == 6)
|
||||
{
|
||||
byte r = Convert.ToByte(rgb.Substring(0, 2), 16);
|
||||
byte g = Convert.ToByte(rgb.Substring(2, 2), 16);
|
||||
byte b = Convert.ToByte(rgb.Substring(4, 2), 16);
|
||||
return new ExColor(System.Drawing.Color.FromArgb(r, g, b));
|
||||
}
|
||||
else if (rgb.Length == 8)
|
||||
{
|
||||
byte r = Convert.ToByte(rgb.Substring(2, 2), 16);
|
||||
byte g = Convert.ToByte(rgb.Substring(4, 2), 16);
|
||||
byte b = Convert.ToByte(rgb.Substring(6, 2), 16);
|
||||
return new ExColor(System.Drawing.Color.FromArgb(r, g, b));
|
||||
}
|
||||
return new ExColor(null);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="IBook"/>, которая делегирует вызовы к <see cref="ExcelWriter"/>.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="ICell"/>.
|
||||
@@ -390,7 +390,7 @@ internal sealed class ExcelCell : ICell
|
||||
}
|
||||
}
|
||||
|
||||
public ICell Set(Action<ICellText> value)
|
||||
public ICell Text(Action<ICellText> value)
|
||||
{
|
||||
if (value == null) return this;
|
||||
_writer.ThrowIfDisposed();
|
||||
@@ -425,6 +425,39 @@ internal sealed class ExcelCell : ICell
|
||||
return this;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public ICellText? Text()
|
||||
{
|
||||
_writer.ThrowIfDisposed();
|
||||
lock (_writer._syncLock)
|
||||
{
|
||||
var cell = GetCellElement();
|
||||
if (cell == null || cell.DataType?.Value != CellValues.InlineString || cell.InlineString == null)
|
||||
return null;
|
||||
|
||||
var textObj = new ExcelCellText();
|
||||
foreach (var run in cell.InlineString.Elements<Run>())
|
||||
{
|
||||
string text = run.GetFirstChild<Text>()?.Text ?? string.Empty;
|
||||
RunFormat? format = null;
|
||||
if (run.RunProperties != null)
|
||||
{
|
||||
// Преобразуем RunProperties в RunFormat (можно вынести в отдельный метод)
|
||||
format = RunFormat.FromRunProperties(run.RunProperties);
|
||||
}
|
||||
textObj.AddRun(text, format);
|
||||
}
|
||||
return textObj;
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool TryText(out ICellText cellText)
|
||||
{
|
||||
cellText = Text()!;
|
||||
return cellText is not null;
|
||||
}
|
||||
|
||||
public ICell Set(string value)
|
||||
{
|
||||
if (value == null) return this;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="ICellText"/> для работы с богатым текстом ячейки.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="IColumn"/>.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="IRange"/>.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="IRow"/>.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="IRun"/> для хранения форматированного фрагмента текста.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Внутренняя реализация <see cref="ISheet"/>.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>Представляет книгу Excel</summary>
|
||||
public interface IBook
|
||||
@@ -700,7 +700,13 @@ public interface ICell
|
||||
ICell Set(CellFont format);
|
||||
|
||||
/// <summary>Устанавливает богатый текст (форматированный) с помощью делегата.</summary>
|
||||
ICell Set(Action<ICellText> value);
|
||||
ICell Text(Action<ICellText> value);
|
||||
|
||||
/// <summary>Возвращает объект для редактирования богатого текста ячейки (если ячейка содержит InlineString).</summary>
|
||||
bool TryText(out ICellText cellText);
|
||||
|
||||
/// <summary>Возвращает объект для редактирования богатого текста ячейки (если ячейка содержит InlineString).</summary>
|
||||
ICellText? Text();
|
||||
|
||||
/// <summary>Устанавливает простое текстовое значение (без форматирования).</summary>
|
||||
ICell Set(string value);
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
public class NumberFormatPattern
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Предоставляет типобезопасное представление высоты строки в Excel с поддержкой различных единиц измерения.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.ExcelProcessor.Editors;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
/// <summary>
|
||||
/// Определяет форматирование отдельного фрагмента (Run) внутри ячейки с богатым текстом.
|
||||
@@ -30,6 +30,66 @@ public readonly struct RunFormat
|
||||
/// <summary>Вертикальное смещение (надстрочный или подстрочный).</summary>
|
||||
public VerticalTextRunAlignment? Vertical { get; init; }
|
||||
|
||||
public static RunFormat? FromRunProperties(RunProperties rPr)
|
||||
{
|
||||
UnderlineStyle? underline;
|
||||
if (rPr.GetFirstChild<Underline>()?.Val?.Value is { } underlineVal)
|
||||
{
|
||||
if (underlineVal == UnderlineValues.Single)
|
||||
{
|
||||
underline = UnderlineStyle.Single;
|
||||
}
|
||||
else if (underlineVal == UnderlineValues.Double)
|
||||
{
|
||||
underline = UnderlineStyle.Double;
|
||||
}
|
||||
else if (underlineVal == UnderlineValues.SingleAccounting)
|
||||
{
|
||||
underline = UnderlineStyle.SingleAccounting;
|
||||
}
|
||||
else if (underlineVal == UnderlineValues.DoubleAccounting)
|
||||
{
|
||||
underline = UnderlineStyle.DoubleAccounting;
|
||||
}
|
||||
else underline = null!;
|
||||
}
|
||||
else underline = null!;
|
||||
|
||||
VerticalTextRunAlignment? vertical;
|
||||
if (rPr.GetFirstChild<VerticalTextAlignment>()?.Val?.Value is { } verticalVal)
|
||||
{
|
||||
if (verticalVal == VerticalAlignmentRunValues.Superscript)
|
||||
{
|
||||
vertical = VerticalTextRunAlignment.Superscript;
|
||||
}
|
||||
else if (verticalVal == VerticalAlignmentRunValues.Subscript)
|
||||
{
|
||||
vertical = VerticalTextRunAlignment.Subscript;
|
||||
}
|
||||
else vertical = null!;
|
||||
}
|
||||
else vertical = null!;
|
||||
|
||||
|
||||
if (rPr == null) return null;
|
||||
var fmt = new RunFormat
|
||||
{
|
||||
IsBold = rPr.GetFirstChild<Bold>() != null,
|
||||
IsItalic = rPr.GetFirstChild<Italic>() != null,
|
||||
IsStrike = rPr.GetFirstChild<Strike>() != null,
|
||||
// DoubleStrike в Excel не поддерживается, опускаем
|
||||
|
||||
Underline = underline,
|
||||
Color = rPr.GetFirstChild<Color>()?.Rgb is not null
|
||||
? ExColor.FromRgb(rPr.GetFirstChild<Color>()!.Rgb!.Value!)
|
||||
: null!,
|
||||
FontSize = rPr.GetFirstChild<FontSize>()?.Val?.Value,
|
||||
FontFamily = rPr.GetFirstChild<RunFont>()?.Val,
|
||||
Vertical = vertical
|
||||
};
|
||||
return fmt;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
методы для извлечения OpenXmlElement или других более удобных типов
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using QWERTYkez.ExcelProcessor.Editors;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
using QWERTYkez.ExcelProcessor.Editors;
|
||||
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
namespace QWERTYkez.ExcelProcessor;
|
||||
|
||||
public interface IExcelWriter : IBook
|
||||
{
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace QWERTYkez.ExcelProcessor;
|
||||
/// к верхнему регистру и удаляет диакритические знаки (например, 'ё' -> 'Е').
|
||||
/// Реализует ISet<string>, поэтому может использоваться там, где ожидается этот интерфейс.
|
||||
/// </summary>
|
||||
public class NormalizedSet : ISet<string>
|
||||
internal class NormalizedSet : ISet<string>
|
||||
{
|
||||
private readonly HashSet<string> _inner;
|
||||
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<NoWarn>1701;1702;IDE0130</NoWarn>
|
||||
|
||||
<!-- NuGet -->
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Version>0.9.0</Version>
|
||||
<Version>0.9.1</Version>
|
||||
<Authors>QWERTYkez</Authors>
|
||||
<Company>QWERTYkez</Company>
|
||||
<Description>OpenXml Processor library for Excel</Description>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.WordProcessor.Builders;
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
public readonly struct CellProps(double? width = null!)
|
||||
{
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using MathStyle = DocumentFormat.OpenXml.Math.Style;
|
||||
using MathStyleValues = DocumentFormat.OpenXml.Math.StyleValues;
|
||||
|
||||
namespace QWERTYkez.WordProcessor.Builders;
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
public record FontProps
|
||||
{
|
||||
|
||||
@@ -17,7 +17,7 @@ using SubSuperscript = DocumentFormat.OpenXml.Math.SubSuperscript;
|
||||
using SuperArgument = DocumentFormat.OpenXml.Math.SuperArgument;
|
||||
using Superscript = DocumentFormat.OpenXml.Math.Superscript;
|
||||
|
||||
namespace QWERTYkez.WordProcessor.Builders;
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
internal static class FormulaHelper
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.WordProcessor.Builders;
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
public interface ITable
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.WordProcessor.Builders;
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
abstract class ParagraphBuilderBase : IParagraph, IFormula
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.WordProcessor.Builders;
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
internal sealed class TableBuilder : ParagraphBuilderBase, ITable, IRow, ICell
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace QWERTYkez.WordProcessor.Builders;
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
internal sealed class TextBuilder : ParagraphBuilderBase, IText
|
||||
{
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using QWERTYkez.WordProcessor.Builders;
|
||||
using QWERTYkez.WordProcessor;
|
||||
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace QWERTYkez.WordProcessor;
|
||||
/// к верхнему регистру и удаляет диакритические знаки (например, 'ё' -> 'Е').
|
||||
/// Реализует ISet<string>, поэтому может использоваться там, где ожидается этот интерфейс.
|
||||
/// </summary>
|
||||
public class NormalizedSet : ISet<string>
|
||||
internal class NormalizedSet : ISet<string>
|
||||
{
|
||||
private readonly HashSet<string> _inner;
|
||||
|
||||
|
||||
@@ -5,10 +5,11 @@
|
||||
<LangVersion>latest</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
|
||||
<NoWarn>1701;1702;IDE0130</NoWarn>
|
||||
|
||||
<!-- NuGet -->
|
||||
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||
<Version>0.9.0</Version>
|
||||
<Version>0.9.1</Version>
|
||||
<Authors>QWERTYkez</Authors>
|
||||
<Company>QWERTYkez</Company>
|
||||
<Description>OpenXml Processor library for Word</Description>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using QWERTYkez.WordProcessor.Builders;
|
||||
using QWERTYkez.WordProcessor;
|
||||
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using QWERTYkez.WordProcessor.Builders;
|
||||
using QWERTYkez.WordProcessor;
|
||||
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using QWERTYkez.WordProcessor.Builders;
|
||||
using QWERTYkez.WordProcessor;
|
||||
|
||||
namespace QWERTYkez.WordProcessor;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user