【发布时间】:2011-12-27 14:17:50
【问题描述】:
我们有一个自动流程,可以打开模板 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()
【问题讨论】:
-
尝试设置手动计算模式。 - msdn.microsoft.com/en-us/library/bb687891.aspx
-
@AVD 成功了,谢谢 :) 如果您将其作为答案发布,我会接受它
-
很高兴你成功了。