2010-10-25 34 views
1

我需要通過網絡系統在Excel中生成某種報表。我目前的代碼如下(簡化):提高創建Excel表格速度(編程)

//[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; 

即使我只填充少數行,大約需要10秒。有沒有什麼辦法可以加快這個過程,比如在內存中創建整個工作表而不是逐個填充單元格?

回答

2

定義的首先是對象數組[,]。不管它有多大,你都不會再看到時間延遲。順便說一句,數組也可以保存公式。

例如像這個函數我用在我的項目中:

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

我認爲這是一個合適的解決方案,但我無法設法使它在JavaScript中工作: - /。當我嘗試將對象數組分配給我的cellRange時,我得到「';'字符預期「錯誤,但我不會錯過任何,我的索引是正確的等等 – zgorawski 2010-10-29 10:49:00

+0

它看起來像是與';'字符的東西,但不能幫助你,JavaScript不是我的世界。 - 數組基於零?而你在文中沒有任何公式的味精,否則;是一些文化中的分隔者,例如德語。 – Rolfi 2010-10-29 15:34:21

0

你可以嘗試禁用重新計算,看看有沒有什麼幫助

Application.Calculation = xlCalculationManual 

Application.Calculation = xlCalculationAutomatic 

除此之外,這個頁面有一些好的建議,擠儘可能多的表現出來的Excel

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

+0

當我將這些計算開關添加到javascript我收到空白表(無錯誤)。我更深入地瞭解網絡,看起來我無法以任何簡單的方式加快速度。 – zgorawski 2010-10-27 11:29:30