我們有一個打開模板excel文件,寫入數據行的自動處理,並將該文件返回給用戶。這個過程通常很快,但是最近我被要求用一些Excel公式添加一個摘要頁面到其中一個模板,現在這個過程需要一段時間。寫入包含公式的Excel文件非常慢
它成功地用了幾分鐘後約5個記錄上運行,但是這周的記錄集幾乎是400行,我已經讓它運行時間最長的是約一個半小時,再取消。如果沒有這些公式,只需要幾秒鐘就可以運行。
是否有任何已知問題與行寫入包含公式的Excel文件?或者有沒有辦法告訴Excel不要評估公式,直到文件被用戶打開?
對彙總表上的公式是這些:
' Returns count of cells in column where data = Y
=COUNTIF(Sheet1!J15:Sheet1!J10000, "Y")
=COUNTIF(Sheet1!F15:Sheet1!F10000, "Y")
' Return sum of column where data is a number greater than 0
' Column contains formula calculating the difference in months between two dates
=SUMIF(Sheet1!I15:Sheet1!I10000,">0",Sheet1!I15:Sheet1!I10000)
' Returns a count of distinct values in a column
=SUMPRODUCT((Sheet1!D15:Sheet1!D10000<>"")/COUNTIF(Sheet1!D15:Sheet1!D10000,Sheet1!D15:Sheet1!D10000&""))
並寫入到Excel的代碼看起來是這樣的:
已經救了我多年來Dim xls as New Excel.Application()
Dim xlsBooks as Excel.Workbooks, xlsBook as Excel.Workbook
Dim xlsSheets as Excel.Sheets, xlsSheet as Excel.Worksheet
Dim xlsCells as Excel.Range
xls.Visible = False
xls.DisplayAlerts = False
xlsBooks = xls.Workbooks
xlsBooks.Open(templateFile)
xlsBook = xlsBooks.Item(1)
' Loop through excel Sheets. Some templates have multiple sheets.
For Each drSheet as DataRow in dtSheets.Rows
xlsSheets = xlsBook.Worksheets
xlsSheet = CType(xlsSheets.Item(drSheet("SheetName")), Excel.Worksheet)
xlsCells = xlsSheet.Cells
' Loop though Column list from Database. Each Template requires different columns
For Each drDataCols as DataRow in dtDataCols.Rows
' Loop though Rows to get data
For Each drData as DataRow in dtData.Rows
xlsCells(drSheet("StartRow") + dtData.Rows.IndexOf(drData), drDataCols("DataColumn")) = drData("Col" + drDataCols("DataColumn").toString).toString
Next
Next
Next
xlsSheet.SaveAs(newFile)
xlsBook.Close
xls.Quit()
嘗試設置**手動**計算模式。 - http://msdn.microsoft.com/en-us/library/bb687891.aspx – adatapost 2011-12-27 14:24:49
@AVD這工作,謝謝:)如果您發佈,作爲一個答案我會接受它 – Rachel 2011-12-27 14:56:45
高興你得到它的工作。 – adatapost 2011-12-27 15:05:22