18 votes

Quelle est la différence entre CellValues.InlineString et CellValues.String dans OpenXML ?

J'essaie d'écrire un code pour générer une feuille de calcul Excel et je ne suis pas sûr de la différence entre CellValues.InlineString y CellValues.String pour insérer du texte dans les cellules.

Dois-je utiliser ceci ?

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

cette

private void UpdateCellTextValue(Cell cell, string cellValue)
{
    cell.CellValue = new CellValue(cellValue);
    cell.DataType = new EnumValue<CellValues>(CellValues.String);
}

ou simplement ceci (InsertSharedStringItem renvoie l'Id de l'élément de chaîne partagée nouvellement inséré)

private void SetCellSharedTextValue(Cell cell,string cellValue)
{        
    int stringId = InsertSharedStringItem(cellValue);
    cell.CellValue = new CellValue(stringId.ToString());
    cell.DataType = new EnumValue<CellValues>(CellValues.SharedString);
}

17voto

amurra Points 8822

Selon la documentation disponible à l'adresse 18.18.11 ST_CellType :

str (String) Cellule contenant une formule string.

Vous ne voudrez utiliser CellValues.String que lorsque vous insérerez une formule dans la cellule. Voici à quoi devrait ressembler le fichier 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 ne doit être utilisé que si vous ne voulez pas stocker la chaîne dans le fichier SharedStringTable . Ensuite, tout ce que vous marquez comme inlineString seront traités comme du texte enrichi. Notez toutefois que lorsque vous utilisez CellValues.InlineString que votre texte doit être entouré d'un élément de texte et <is> étiquette :

<x:c r="B2" t="inlineStr">
   <is><t>test string</t></is>
</c>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X