diff --git a/QWERTYkez.ExcelProcessor/Editors/ExcelCell.cs b/QWERTYkez.ExcelProcessor/Editors/ExcelCell.cs
index 53cf5e7..e0a9019 100644
--- a/QWERTYkez.ExcelProcessor/Editors/ExcelCell.cs
+++ b/QWERTYkez.ExcelProcessor/Editors/ExcelCell.cs
@@ -426,15 +426,34 @@ internal sealed class ExcelCell : ICell
}
///
- 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())
{
@@ -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;
}
}
diff --git a/QWERTYkez.ExcelProcessor/Editors/Interfaces.cs b/QWERTYkez.ExcelProcessor/Editors/Interfaces.cs
index e1fc048..954f898 100644
--- a/QWERTYkez.ExcelProcessor/Editors/Interfaces.cs
+++ b/QWERTYkez.ExcelProcessor/Editors/Interfaces.cs
@@ -706,7 +706,7 @@ public interface ICell
bool TryText(out ICellText cellText);
/// Возвращает объект для редактирования богатого текста ячейки (если ячейка содержит InlineString).
- ICellText? Text();
+ ICellText Text();
/// Устанавливает простое текстовое значение (без форматирования).
ICell Set(string value);