【问题标题】:excel COM API - assign to a range of cellsexcel COM API - 分配给一系列单元格
【发布时间】:2012-11-10 01:40:27
【问题描述】:

由于使用 Excel API 通过 C# 代码分配给大工作表中的每个单元格可能效率很低,因此我试图分配给一系列单元格。但是, Range.Value2 仅适用于多维数组。就我而言,我有一个字符串列表。有没有办法做到这一点?在列表和数组之间来回转换可能效率低下。

谢谢

【问题讨论】:

  • 在字符串列表和数组之间来回转换在 .NET 中非常高效,因为不必复制字符串,只需复制指针(它们是引用到不可变对象)。与实际上必须在将字符串复制到 Excel 的过程中(可能不止一次)复制的事实相比,这样做的成本将很小。也看看这里:stackoverflow.com/questions/3840270/…

标签: c# excel


【解决方案1】:

Excel 互操作的成本是调用进程外组件的开销。需要做一些工作来跨流程边界编组数据。但这是一个恒定的成本,取决于数据量。数据越少越好,但这不是您的典型选择。

因此,真正的成本首先在于拨打电话的开销。与进行进程内方法调用的成本相比,这是非常可观的。在最坏的情况下,这需要几个 cpu 周期。进程外调用需要两个线程上下文切换,这至少需要 2000 到 10000 个周期,仅用于处理器开销。您处于该线程的高端,因为需要在 Excel 中运行的线程归另一个进程所有,因此处理器缓存是垃圾。添加该线程响应的延迟,高度不可预测。

因此,您有 数十 个 CPU 周期的预算来进行转换并取得成功。明智地使用它们。当然,实际试试吧,没人能保证。

【讨论】:

  • 谢谢。这就是为什么分配给一系列单元格将比一次分配给一个单元格更有效,尤其是对于像我这样的大表格。所以我的问题仍然是如何使用 Excel API 有效地分配给一系列单元格,而不必使用多维数组 [,]
  • 你没写到答案的最后一句,是吗?
  • 实际上我做到了,但没有看到答案。但感谢您的宝贵时间。
猜你喜欢
  • 2013-04-22
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
相关资源
最近更新 更多