c# openxml openxml-sdk
18.18.11 ST_CellType

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); }