This commit is contained in:
@@ -426,15 +426,34 @@ internal sealed class ExcelCell : ICell
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public ICellText? Text()
|
||||
public ICellText Text()
|
||||
{
|
||||
_writer.ThrowIfDisposed();
|
||||
lock (_writer._syncLock)
|
||||
{
|
||||
var cell = GetCellElement();
|
||||
if (cell == null || cell.DataType?.Value != CellValues.InlineString || cell.InlineString == null)
|
||||
return null;
|
||||
// 1. Получаем или создаём элемент ячейки
|
||||
var cell = GetOrCreateCellElement();
|
||||
|
||||
// 2. Убедимся, что у ячейки правильный тип и есть InlineString
|
||||
if (cell.DataType == null || cell.DataType.Value != CellValues.InlineString)
|
||||
{
|
||||
// Если был другой тип (например, число) — меняем на InlineString
|
||||
cell.DataType = CellValues.InlineString;
|
||||
// Удаляем старый InlineString, если был
|
||||
cell.InlineString?.Remove();
|
||||
// Создаём новый пустой InlineString
|
||||
cell.InlineString = new InlineString();
|
||||
// Добавляем пустой Text (обязательно для Open XML)
|
||||
cell.InlineString.AppendChild(new Text());
|
||||
}
|
||||
else if (cell.InlineString == null)
|
||||
{
|
||||
// Если тип InlineString, но сам элемент отсутствует
|
||||
cell.InlineString = new InlineString();
|
||||
cell.InlineString.AppendChild(new Text());
|
||||
}
|
||||
|
||||
// 3. Строим объект ICellText на основе содержимого InlineString
|
||||
var textObj = new ExcelCellText();
|
||||
foreach (var run in cell.InlineString.Elements<Run>())
|
||||
{
|
||||
@@ -442,11 +461,14 @@ internal sealed class ExcelCell : ICell
|
||||
RunFormat? format = null;
|
||||
if (run.RunProperties != null)
|
||||
{
|
||||
// Преобразуем RunProperties в RunFormat (можно вынести в отдельный метод)
|
||||
format = RunFormat.FromRunProperties(run.RunProperties);
|
||||
}
|
||||
textObj.Run(text, format);
|
||||
}
|
||||
|
||||
// Если не было ни одного Run, текст всё равно должен быть доступен (пустой)
|
||||
// Можно оставить textObj пустым, а можно сразу добавить пустой Run
|
||||
// (но это не обязательно – пользователь может добавить run позже)
|
||||
return textObj;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -706,7 +706,7 @@ public interface ICell
|
||||
bool TryText(out ICellText cellText);
|
||||
|
||||
/// <summary>Возвращает объект для редактирования богатого текста ячейки (если ячейка содержит InlineString).</summary>
|
||||
ICellText? Text();
|
||||
ICellText Text();
|
||||
|
||||
/// <summary>Устанавливает простое текстовое значение (без форматирования).</summary>
|
||||
ICell Set(string value);
|
||||
|
||||
Reference in New Issue
Block a user