2010-10-25 9 views
1

J'ai besoin de générer un certain type de rapports dans Excel via le système Web. Mon code actuel est le suivant (simplifié):Améliorer la création de la vitesse de feuille Excel (par programmation)

//[javascript inside .aspx page] 

ExcelApp = new ActiveXObject("Excel.Application"); 
ExcelSheet = new ActiveXObject("Excel.Sheet"); 

ExcelSheet.Windows(1).WindowState = 2; 
ExcelSheet.Application.Visible = false; 

for (i=1; i< [elementNumber]; i++) 
{ 
    ExcelSheet.ActiveSheet.Cells(i,1).Value = myXML.documentElement.childNodes(i).text; 
} 

ExcelSheet.Application.Visible = true; 

Même si je ne remplir quelques lignes hunded qu'il faut environ 10 secondes. Est-il possible d'accélérer ce processus comme créer une feuille entière en mémoire au lieu de peupler cellule par cellule?

Répondre

2

Définir une tableau d'objet [,] en premier. Vous ne verrez plus de retard, peu importe sa taille. Btw, le tableau peut également contenir des formules.

par exemple. quelque chose comme cette fonction que j'utilise dans mon projet:

public static void AddValueArrayToSheet(_Worksheet ws, Range rangeTopLeft, object[,] values) { 
     Range cellRange = ws.Cells.get_Range(rangeTopLeft, rangeTopLeft[values.GetUpperBound(0) + 1, values.GetUpperBound(1) + 1]); 
     cellRange.Value = values; 
    } 
+0

Je pense que c'est une bonne solution, mais je n'arrive pas à le faire fonctionner en JavaScript: - /. Lorsque j'essaie d'assigner un tableau d'objets à mon cellRange, j'obtiens "'; char attendu "erreur, mais je ne manque pas tout, mes index sont justes etc – zgorawski

+0

Il semble que c'est quelque chose avec le caractère ';', mais ne peut pas vous aider sur ce point, JavaScript n'est pas vraiment mon monde. - Le tableau est basé sur zéro? Et vous n'avez pas de formules dans le texte msg, sinon le; est le séparateur dans certaines cultures, par ex. Allemand. – Rolfi

0

Vous pouvez essayer de désactiver recalcul pour voir si cela aide

Application.Calculation = xlCalculationManual 

Application.Calculation = xlCalculationAutomatic 

Autre que cette page a quelques bons conseils pour presser autant la performance sur Excel

http://www.cpearson.com/excel/optimize.htm

+0

Lorsque j'ai ajouté ces commutateurs de calcul en javascript, j'ai récupéré une feuille vide (pas d'erreurs). J'ai regardé plus profondément dans le Web et il semble que je ne peux pas le rendre plus rapide de toute façon facile. – zgorawski