【问题标题】:How can I get a range object from the row and column index using Excel Interop?如何使用 Excel 互操作从行和列索引中获取范围对象?
【发布时间】: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 来选择整行的解决方案,但据我所知,无法使用.RangeRow,Column 指定为数字。 AFAIK Range 成员希望将行指定为整数(1、2、3 等),将列指定为字符串(A、B、C、YYY 等)

标签: vb.net excel-interop


【解决方案1】:

您可以按如下方式指定范围:

sheetName.Range(sheetName.Cells(row1, col1), sheetName.Cells(row2, col2))

然后你可以随意使用这个范围。

是的,我意识到这个答案很晚,但我遇到了同样的问题......

【讨论】:

  • 谢谢 DrDonut 我知道您的解决方案迟到了,我的评论迟到了,但是在寻找了几个小时之后,这是不会在我的 Excel 插件项目中引发 COM(或其他)错误的答案.
猜你喜欢
  • 2010-12-27
  • 1970-01-01
  • 2017-10-10
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多