7

http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.worksheet.get_range.aspx它说使用 Range 属性而不是 get_Range(Object Cell1, Object Cell2)。

他们都在做同样的事情,获取一个代表一个单元格或一系列单元格的 Microsoft.Office.Interop.Excel.Range 对象。那么,除了这是一种方法而另一种是属性之外,还有什么区别?他们为什么要使用 Range[],这是什么原因?

4

3 回答 3

6

Range() 比 Range[] 快

通过实践,我们注意到了这种情况。但这里应该定义一个这样说的理由。

当您要引用绝对范围时,此快捷方式很方便。但是,它不如 Rangeproperty 灵活,因为它不能将变量输入作为字符串或对象引用处理。所以在一天结束的时候,你仍然会提到很长的路要走。虽然矮个子提供了可读性。因此,不妨在不花费更多资源的情况下在第一轮就做好。

现在为什么慢?在编译中。

“在运行时 Excel 总是使用常规符号(或者我被告知),因此在编译代码时,所有快捷方式符号中的引用都必须转换为常规范围形式(或者我被告知)。{即 [A150] 必须转换为 Range("A150") 形式}。无论我被告知的真相如何,Visual Basic 都必须记住其代码的编译版本以及您用于编写代码的任何符号(即代码模块中的任何内容),文件大小(使用的内存)的工作簿属性因此略有上升。”

如您所见,我的回答更符合 VBA。然而,经过一些研究,它有点证明 VBA 方面并没有放慢速度。所以你只需要照顾 C# 方面。@Hans 从 C# 角度为您提供了更好的答案。希望将两者结合起来,您将获得出色的性能代码:)

以下是 Excel 中 Range[] vs Range() 性能的一些发现

在此处输入图像描述

于 2012-12-07T11:06:22.923 回答
3

如果您使用 C# 版本 4 及更高版本,则可以使用 Range 索引器。但是您必须在早期版本上使用 get_Range() 。

请注意,它有一些特别之处,COM 接口的默认属性映射到索引器。但是 Range 属性不是 Worksheet 的默认属性,它只是一个常规属性。麻烦的是,C# 不允许声明索引器以外的索引属性。在 VB.NET 中工作,而不是在 C# 中,您必须直接调用属性 getter 方法。应大众需求,C# 团队在版本 4 (VS2010) 中取消了此限制。但仅在 COM 接口上,您仍然不能在自己的代码中声明索引属性。

于 2012-12-07T11:35:02.913 回答
0

我已经使用了两者并且都返回了相同的结果。我认为 Range[] 实际上在内部使用 get_Range() 。

对于命名约定的问题,我现在只使用 Range[]。

于 2012-12-07T09:15:05.793 回答