c# - ¿Cuál es la diferencia entre CellValues.InlineString y CellValues.String en OpenXML?
openxml-sdk (1)
De acuerdo con la documentación en 18.18.11 ST_CellType :
str (String) Celda que contiene una cadena de fórmula.
Solo deseará utilizar CellValues.String cuando inserte una fórmula en la celda. Aquí es cómo debe verse el 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
solo se debe utilizar si no desea almacenar la cadena en la SharedStringTable
. Entonces, cualquier cosa que marque como inlineString
se tratará como texto enriquecido. Aunque tenga en cuenta que cuando usa CellValues.InlineString
su texto debe estar rodeado por un elemento de texto y una etiqueta <is>
:
<x:c r="B2" t="inlineStr">
<is><t>test string</t></is>
</c>
Estoy tratando de escribir algo de código para generar una hoja de cálculo de Excel y no estoy seguro de cuál es la diferencia entre CellValues.InlineString y CellValues.String para insertar texto en las celdas.
¿Debo usar esto?
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);
}
esta
private void UpdateCellTextValue(Cell cell, string cellValue)
{
cell.CellValue = new CellValue(cellValue);
cell.DataType = new EnumValue<CellValues>(CellValues.String);
}
o simplemente esto (InsertSharedStringItem devuelve el Id. del elemento de cadena compartido recién insertado)
private void SetCellSharedTextValue(Cell cell,string cellValue)
{
int stringId = InsertSharedStringItem(cellValue);
cell.CellValue = new CellValue(stringId.ToString());
cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
}