首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Excel Interop -效率和性能

Excel Interop -效率和性能
EN

Stack Overflow用户
提问于 2008-12-10 15:03:46
回答 7查看 32.7K关注 0票数 63

我想知道我能做些什么来提高Excel自动化的性能,因为如果你在工作表中有很多事情要做,它可能会相当慢……

下面是我自己发现的几个:

  • ExcelApp.ScreenUpdating = false --关闭screen
  • ExcelApp.Calculation = Excel.XlCalculation.xlCalculationManual的重绘--关闭计算引擎,这样当单元格值改变时,Excel就不会自动重新计算(完成后再打开它)
  • Reduce调用Worksheet.Cells.Item(row, col)Worksheet.Range --我不得不轮询成百上千的单元格才能找到我需要的单元格。实现一些单元位置的缓存,将执行时间从~40秒减少到~5秒。

什么类型的互操作调用会对性能造成很大的影响,应该避免?你还能做些什么来避免不必要的处理呢?

EN

回答 7

Stack Overflow用户

发布于 2010-02-19 12:34:07

当使用C#或VB.Net获取或设置范围时,计算出范围的总大小,然后获得一个大型的二维对象数组……

代码语言:javascript
复制
//get values
object[,] objectArray = shtName.get_Range("A1:Z100").Value2;
iFace = Convert.ToInt32(objectArray[1,1]);

//set values
object[,] objectArray = new object[3,1] {{"A"}{"B"}{"C"}};
rngName.Value2 = objectArray;

请注意,了解Excel存储的数据类型(文本或数字)非常重要,因为当您从对象数组转换回类型时,Excel不会自动执行此操作。如果您事先不能确定数据类型,则在必要时添加测试以验证数据。

票数 49
EN

Stack Overflow用户

发布于 2011-10-06 23:38:00

这是为那些想知道从db结果集填充excel工作表的最佳方法的人准备的。这并不意味着它是一个完整的列表,但它确实列出了一些选项。

在一台旧的奔腾4 3 3GHz机器上尝试填充一个包含155列和4200条记录的excel表格时,包括从最慢到最快顺序从未超过10秒的数据检索时间,一些性能数据如下...

通过转换为html +将HTML保存到磁盘+将html加载到excel并将工作表另存为xls/xlsx -5分钟

  • ,一次保存一列-4分钟

  • 使用SQL 2005中不推荐使用的sp_makewebtask过程创建html文件-9秒以上,然后在excel中加载html文件并另存为XLS/XLSX -大约2 minutes.

  • Convert .Net数据集到ADO RecordSet,然后使用WorkSheet.Range[].CopyFromRecordset函数填充excel - 45秒!

我最终选择了选项5,希望这对我有所帮助。

票数 13
EN

Stack Overflow用户

发布于 2008-12-15 18:31:11

如果您正在轮询多个单元格的值,您可以一下子获得存储在变量数组中的某个范围内的所有单元格的值:

代码语言:javascript
复制
Dim CellVals() as Variant
CellVals = Range("A1:B1000").Value

在获取值的范围的大小方面,这里有一个权衡。我猜,如果你需要一千个或更多的单元格值,这可能比仅仅循环不同的单元格并轮询这些值更快。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/356371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档