Comment spécifier le format pour les cellules individuelles avec Excel.Gamme.set_Value()
Quand j'écris un tableau dans une feuille de calcul excel, je sais travailler avec toute une Gamme à la fois au lieu d'écrire des cellules individuelles. Cependant, est-il un moyen de spécifier le format que je suis le remplissage de la matrice, je vais exporter vers Excel?
Voici ce que je fais maintenant:
object MissingValue = System.Reflection.Missing.Value;
Excel.Application excel = new Excel.Application();
int rows = 5;
int cols = 5;
int someVal;
Excel.Worksheet sheet = (Excel.Worksheet)excel.Workbooks.Add(MissingValue).Sheets[1];
Excel.Range range = sheet.Range("A1", sheet.Cells(rows,cols));
object[,] rangeData = new object[rows,cols];
for(int r = 0; r < rows; r++)
{
for(int c = 0; c < cols; c++)
{
someVal = r + c;
rangeData[r,c] = someVal.ToString();
}
}
range.set_Value(MissingValue, rangeData);
Maintenant, supposons que je veux que certains de ces chiffres sous la forme de pourcentages. Je sais que je peux revenir sur une cellule par cellule de base et modifier la mise en forme, mais qui semble à l'encontre de l'objectif à l'aide d'une seule Plage.set_Value (). Puis-je faire mon rangeData[,] la structure comprennent des informations de mise en forme, de sorte que quand je l'appelle set_Value(), les cellules sont mises en forme de la façon dont je veux?
Pour clarifier, je sais que je peux définir le format de l'ensemble de l'Excel.Objet de la plage. Ce que je veux, c'est avoir un autre format spécifié pour chaque cellule, spécifié dans la boucle interne.
OriginalL'auteur Drew Shafer | 2010-02-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez appliquer une mise en forme sur la plage, puis le remplir avec des valeurs vous ne pouvez pas spécifier la mise en forme vous
object[,]
tableauOriginalL'auteur Stan R.
Voici donc la meilleure "solution" que j'ai trouvé jusqu'à présent. Ce n'est pas le nirvanna que je cherchais, mais il est beaucoup, beaucoup plus rapide que de définir le format pour chaque cellule individuellement.
Fondamentalement ce qui se passe c'est que j'en garde une liste des informations de format pour chaque cellule de la NumberFormatList (chaque élément est également titulaire de la A1 de style adresse de la plage, il s'applique). L'idée de départ était que, pour chaque format de la feuille de calcul, je devrais être capable de construire un Excel.La gamme de ces cellules et de les appliquer le format de la gamme en un seul appel. Cela permettrait de réduire le nombre d'accès à NumberFormat de (potentiellement) des milliers vers le bas, juste un peu (mais de nombreux formats différents que vous avez).
J'ai rencontré un problème, cependant, parce que apparemment vous ne pouvez pas construire une gamme de arbitrairement une longue liste de cellules. Après quelques tests, j'ai trouvé que la limite se situe quelque part entre 50 et 100 cellules qui peuvent être utilisées pour définir une gamme arbitraire (comme dans la gamme.get_Range("A1,B1,C1,A2,AA5,....."). Donc, une fois que j'ai obtenu la liste de toutes les cellules pour appliquer un format à l', j'ai une dernière boucle while() qui s'applique le format de 50 de ces cellules à la fois.
Ce n'est pas l'idéal, mais il réduit encore le nombre d'accès à NumberFormat par un facteur allant jusqu'à 50, ce qui est significatif. La construction de ma feuille de calcul sans n'importe quel format info (uniquement à l'aide de gamme.set_Value()) prend environ 3 secondes. Quand j'applique les formats de 50 cellules à la fois, qui est allongé d'environ 10 secondes. Quand j'applique le format info individuellement pour chaque cellule, la feuille de calcul prend plus de 2 minutes pour terminer en cours de construction!
+ un pour être un chouette morceau de code ; ) je ne savais pas que vous pouviez utiliser un formatSpecifier pour définir une plage de cellules.
OriginalL'auteur Drew Shafer
Vous appliquez la mise en forme de chaque cellule à l'intérieur de la boucle interne via
Une fois que vous avez
r2
, vous pouvez modifier le format de cellule de la manière que vous voulez.OriginalL'auteur JDMX