2009-12-17 10 views
0

Sur mon ordinateur, le rapport est généré en environ 3-4 secondes, et c'était comme ça sur tous les ordinateurs auparavant. Mais récemment, sur un couple d'ordinateurs dans le rapport de bureau de génération a commencé à prendre 30-40 secondes. Sur les autres ordinateurs, c'est toujours rapide. J'ai essayé de réinstaller MS Office sans succès.Excel Automation fonctionne très lentement!

Par exemple, ce code prend !!! 3 !!! secondes à exécuter:

xlWS.Name = "INVOICE"; 
xlWS.PageSetup.PaperSize = XlPaperSize.xlPaperA4; 
xlWS.PageSetup.TopMargin = xl.CentimetersToPoints(1.5); 
xlWS.PageSetup.LeftMargin = xl.CentimetersToPoints(1); 
xlWS.PageSetup.BottomMargin = xl.CentimetersToPoints(1.5); 
xlWS.PageSetup.RightMargin = xl.CentimetersToPoints(1); 
xlWS.PageSetup.Zoom = 60; 

Qu'est-ce que cela peut être?
Merci d'avance.

+0

est-il lent encore lorsque vous créez un nouveau profil d'utilisateur sur votre PC et d'exécuter le code sous cet utilisateur? –

+1

Imprimante réseau ou locale? Quelque chose à propos de l'imprimante ou du réseau a-t-il changé récemment? – overslacked

+0

Il semble que l'imprimante par défaut a été modifiée récemment. Ou peut-être la raison en est qu'ils ont installé Windows 7 sur l'ordinateur du réseau avec l'imprimante par défaut. Je vais enquêter plus loin. Quoi qu'il en soit, lorsque j'ai changé l'imprimante par défaut à l'imprimante locale, il fonctionne rapidement, comme il se doit. Je vous remercie. Si vous changez votre commentaire à une réponse, je vais vous ajouter quelques points :) – nightcoder

Répondre

2

Modifiez l'imprimante par défaut en une imprimante locale au lieu d'une imprimante réseau. Pop le câble réseau, pour être sûr. Demandez ensuite à votre administrateur LAN de publier sur serverfault.com

+0

Il semble que l'imprimante par défaut a été modifiée récemment. Ou peut-être la raison en est qu'ils ont installé Windows 7 sur l'ordinateur du réseau avec l'imprimante par défaut. Je vais enquêter plus loin. Quoi qu'il en soit, lorsque j'ai changé l'imprimante par défaut à l'imprimante locale, il fonctionne rapidement, comme il se doit. Je vous remercie. – nightcoder

1

Les propriétés Worksheet.PageSetup sont extrêmement lentes lorsque vous les définissez, mais elles sont très rapides pour obtenir simplement une valeur. Par conséquent, la meilleure approche consiste à vérifier chaque valeur d'abord, pour vous assurer que vous avez besoin de le définir, puis définir uniquement les propriétés dont vous avez besoin. En outre, il peut être utile de définir 'Application.ScreenUpdating = False' et 'Application.Calculation = xlCalculationManual'.

En utilisant votre code comme point de départ, le code mis à jour pourrait ressembler à quelque chose comme ceci:

Excel.Application excelApp = xlWS.Application; 

bool origScreenUpdating = excelApp.ScreenUpdating; 

Excel.XlCalculation origCalcMode = excelApp.Calculation; 

try 
{ 
    myExcelApp.ScreenUpdating = False; 

    myExcelApp.Calculation = xlCalculationManual; 

    xlWS.Name = "INVOICE"; 

    if (xlWS.PageSetup.PaperSize != XlPaperSize.xlPaperA4) 
    { 
     xlWS.PageSetup.PaperSize = XlPaperSize.xlPaperA4; 
    } 

    if (xlWS.PageSetup.TopMargin != xl.CentimetersToPoints(1.5)) 
    { 
     xlWS.PageSetup.TopMargin = xl.CentimetersToPoints(1.5); 
    } 

    if (xlWS.PageSetup.LeftMargin != xl.CentimetersToPoints(1)) 
    { 
     xlWS.PageSetup.LeftMargin = xl.CentimetersToPoints(1); 
    } 

    if (xlWS.PageSetup.BottomMargin != xl.CentimetersToPoints(1.5)) 
    { 
     xlWS.PageSetup.BottomMargin = xl.CentimetersToPoints(1.5); 
    } 

    if (xlWS.PageSetup.RightMargin != xl.CentimetersToPoints(1)) 
    { 
     xlWS.PageSetup.RightMargin = xl.CentimetersToPoints(1); 
    } 

    if (xlWS.PageSetup.Zoom != 60) 
    { 
     xlWS.PageSetup.Zoom = 60; 
    } 
} 
finally 
{ 
    myExcelApp.ScreenUpdating = origScreenUpdating; 
    myExcelApp.Calculation = origCalcMode; 
} 

C'est le meilleur que vous pouvez faire sur le côté Excel des choses - et il aide généralement beaucoup . Cependant, je suis moins certain de savoir à quel point cela vous aidera dans votre situation, car il semblerait que vous fassiez beaucoup de changements de réglages qui diffèrent de ceux par défaut. Par conséquent, vérifier d'abord que la valeur doit être effectuée peut ne pas vous aider si toutes ces modifications doivent, en fait, se produire.

Mais je me croise les doigts pour vous ...

- Mike

(Soit dit en passant, pour référence croisée, voici une réponse VBA j'ai donné sur le même sujet où l'OP a vu une amélioration de la performance agréable: How to print faster in Excel VBA?)

1

va probablement accélérer votre application de manière significative. Vous pouvez lire les citations de certains de nos clients here - plusieurs de ces citations soulignent les améliorations de performances fournies par SpreadsheetGear for .NET.

Vous pouvez télécharger l'essai gratuit here si vous voulez l'essayer vous-même.

Disclaimer: Je possède SpreadsheetGear LLC

Questions connexes