【发布时间】:2015-07-10 17:20:21
【问题描述】:
我正在学习 VB.Net 并尝试从 VBA 过渡。如何使用行和列索引检索范围类型的对象?
在 VBA 中,我将使用 Worksheet.Cells([Row,Column]),这将返回 Range 类型的对象。
然而,使用 Excel 互操作,返回输入为 Object。
示例:
Dim MyExcel as new Application
Dim MyBook as new Workbook=MyExcel.Workbooks.Open("SomePath\SomeFile.xlsx")
Dim MySheet as new Worksheet=MyBook.Sheets("SomeSheet")
MessageBox.Show(CStr(Sheet2015.Cells(1, 1).Value))
现在,the MSDN for Worksheet.Cells 说:
因为 Item 属性是 Range 的默认属性 对象,您可以在 单元格关键字。有关详细信息,请参阅 Item 属性。
但是从该页面到 Item 属性的链接会将您带到 Worksheet.Item,而不是 Range.Item - 所以它应该说是
“Item 属性是 Worksheet 的默认属性 对象...”
Worksheet.Item 属性的返回是Object 类型的对象,这就解释了为什么我没有得到智能感知:(
那么我可以使用另一种方法,通过提供单元格的索引(行、列)而不是地址来从工作表返回 Range 对象?
我知道我可以使用 Worksheet.Range 并提供 A1 引用的地址,但这对我来说比仅使用行和列索引要复杂得多。
我也知道我可以将Worksheet.Cells[R,C] 转换为Range 类型,但我更愿意找到一种方法来返回一个范围。 (请参阅my other question here 关于将 COM 对象作为基类型 Object 使用)
有什么建议吗?
【问题讨论】:
-
我不确定有没有办法直接获取 Range - 我只是转换 Worksheet.Cells(r,c) 的输出。感觉很脏,但所有 COM 互操作对我来说都很脏。如果您对更多类型的 Excel 互操作感兴趣,您可能需要查看 epplus.codeplex.com/releases/view/42439。
-
谢谢杰瑞,我得去看看那个图书馆。很酷。我同意 COM 看起来很脏。至少比我喜欢的还要脏。似乎您确实需要关闭 Option Strict 才能使用 COM 对象,否则您最终会到处进行类型转换 - 我真的不喜欢,因为您最终会在多个位置对类型进行硬编码。
-
@T.S. - 提供的链接显示了如何通过指定
row:row来选择整行的解决方案,但据我所知,无法使用.Range将Row,Column指定为数字。 AFAIKRange成员希望将行指定为整数(1、2、3 等),将列指定为字符串(A、B、C、YYY 等)
标签: vb.net excel-interop