В чем разница между CellValues.InlineString и CellValues.String в OpenXML?
Я пытаюсь написать некоторый код для создания электронной таблицы Excel, и я не уверен, в чем разница между CellValues.InlineString и CellValues.String, чтобы вставить текст в клетки.
Должен ли я использовать это:
private void UpdateCellTextValue(Cell cell,string cellValue)
{
InlineString inlineString = new InlineString();
Text cellValueText = new Text { Text = cellValue };
inlineString.AppendChild(cellValueText);
cell.DataType = CellValues.InlineString;
cell.AppendChild(inlineString);
}
это
private void UpdateCellTextValue(Cell cell, string cellValue)
{
cell.CellValue = new CellValue(cellValue);
cell.DataType = new EnumValue<CellValues>(CellValues.String);
}
или просто это (InsertSharedStringItem возвращает идентификатор недавно вставленного разделяемого строкового элемента)
private void SetCellSharedTextValue(Cell cell,string cellValue)
{
int stringId = InsertSharedStringItem(cellValue);
cell.CellValue = new CellValue(stringId.ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
}
Ответы
Ответ 1
Согласно документации на 18.18.11 ST_CellType:
str (String) Ячейка, содержащая формулу строка.
Вы хотите использовать CellValues.String только при вставке формулы в ячейку. Вот как выглядит XML:
<x:c r="C6" s="1" vm="15" t="str">
<x:f>CUBEVALUE("xlextdat9 Adventure Works",C$5,$A6)</x:f>
<x:v>2838512.355</x:v>
</x:c>
CellValues.InlineString
следует использовать, только если вы не хотите хранить строку в SharedStringTable
. Тогда все, что вы отмечаете как inlineString
, будет рассматриваться как богатый текст. Обратите внимание, что когда вы используете CellValues.InlineString
, чтобы ваш текст был окружен текстовым элементом и тегом <is>
:
<x:c r="B2" t="inlineStr">
<is><t>test string</t></is>
</c>