范围[]而不是get_Range()

时间:2012-12-07 08:57:00

标签: c# excel methods properties

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 [],原因是什么?

3 个答案:

答案 0 :(得分:6)

Range()比Range []

更快

通过练习我们已经注意到了这种情况。但这里应该说明理由。

当您想要引用绝对范围时,此快捷方式很方便。但是,它不像Rangeproperty那样灵活,因为它不能将变量输入作为字符串或对象引用处理。因此,在一天结束时,您仍将最终引用 long 方式。虽然短小提供了可读性。因此,如果没有更多的资源支出,第一轮也可以做到正确。

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

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

如您所见,我的回答更符合VBA。然而经过一些研究证明,VBA方面没有做太多的减速。所以你只需要照顾C#方面。 @Hans在C#透视图中为您提供了更好的答案。希望结合两者,你将获得一个伟大的表现代码:)

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

enter image description here

答案 1 :(得分:3)

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

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

答案 2 :(得分:0)

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

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