2013-07-22 3 views
1

J'exporte des données vers Excel via un modèle avec OpenXML en utilisant OpenXML SDK 2.0. Je peux tout exporter vers Excel. Cependant, le modèle a plusieurs feuilles (toutes en réalité) qui ont des couleurs d'arrière-plan (styles) appliquées à la colonne mais pas à la cellule car Excel n'a pas encore de véritable référence à cette cellule. Je remplis des lignes de données avec des données sur ces feuilles et les valeurs sont correctes, mais quand je leur mets le formatage de la cellule, il revient au fond blanc par défaut et ne correspond plus au reste de la feuille.Format de colonne OpenXML Excel?

Comment puis-je faire en sorte que la cellule hérite du style de la colonne dans laquelle elle se trouve? J'ai pensé à essayer de chercher dans la colonne et d'obtenir son style et définir le style de la cellule à cela, mais je ne peux pas trouver comment trouver une colonne par sa référence. Je peux itérer toutes les colonnes dans une feuille, mais ils ne me donnent pas leur référence ...

Voici l'extrait qui insère effectivement la cellule dans une rangée:

Cell newCell = new Cell() { CellReference = cellReference }; 
    if (refCell == null) 
    { row.Append(newCell); } 
    else 
    { row.InsertBefore(newCell, refCell); } 

refCell est de code précédent et est essentiellement de faire en sorte que les cellules sont énumérées dans le bon ordre que Excel la hauteur d'un ajustement si elles ne sont pas ...

Ensuite, la partie qui définit la valeur réelle est:

 c.CellValue = new CellValue(indx.ToString()); 
    c.DataType = new EnumValue<CellValues>(CellValues.SharedString); 

ind x est l'indice de la chaîne dans la table de chaînes partagée.

Quelqu'un peut-il aider?

Merci

Répondre

1

Comment exactement définissez-vous la valeur. Normalement, il ne devrait pas y avoir de remplacement du style, mais je ne l'ai pas testé moi-même (nous n'utilisons pas de modèles).

Quoi qu'il en soit: pour trouver la référence de colonne, vous pouvez utiliser:

ExcelColumn columnReference = ExcelWorksheet.Column(columnIndex); 

Edit: J'utilise la bibliothèque EPPlus (http://epplus.codeplex.com/) pour cela, par la voie. À mon avis, c'est une implémentation très facile à utiliser. Je pensais que c'était celui que vous utilisiez, mais j'ai peut-être tort.

+0

Edité pour ajouter les portions de code pertinentes ... Merci pour le conseil sur la colonne. – sfaust

+0

Ok, je ne peux pas comprendre comment faire fonctionner les colonnes. Je ne trouve rien sur le code que vous avez posté ci-dessus. Je ne vois rien dans OpenXML à propos d'un objet appelé ExcelColumn. Je vois Column et Columns, et si j'ouvre manuellement les fichiers XML, je peux voir un élément avec plusieurs éléments en son sein. Cependant, lorsque j'essaie Worksheet.Descendants () ou Worksheet.Descendants () ou Worksheet.Éléments () ou Worksheet.Elements () Je n'ai rien ... – sfaust

+0

Comment dans le monde arrivez-vous à l'index de style de colonne? – sfaust

1

Vous pouvez obtenir le nom de la colonne via la référence de la cellule, puis obtenir toutes les cellules qui se trouvent dans la même colonne. Si la première cellule de la colonne a un style, vous pouvez l'appliquer à la cellule en cours en utilisant leur StyleIndex.

Vous pouvez jeter un oeil à cette page qui explique comment obtenir le nom de la colonne en fonction de la référence de cellule: http://msdn.microsoft.com/en-us/library/office/cc822064.aspx

Peut-être il y a une façon plus directe de faire ce que vous voulez, mais je ne sais pas .

Questions connexes