C# 互操作 Excel 范围 get_End 返回的元素少 1 个

本文关键字:元素 返回 End Excel 互操作 范围 get | 更新日期: 2023-09-27 18:32:26

我需要解析一个Excel文件。首先,我在Excel文件中用Visual Basic编写了一个扩展,一切正常。现在我需要将其移植到 C#,以便它可以成为一个单独的应用程序。
虽然我使用的功能相同,但结果却不一样......

当我从GUI中选择要解析的工作表时,我会执行以下操作:

range = (workbook.Worksheets.get_Item(itemIndex) as Excel.Worksheet).UsedRange;

然后,对于我需要解析的第一行,我做了这样的事情:

range.get_Range(range.Cells.get_Item(6, 2),
             range.Cells.get_Offset(6,2).get_End(Excel.XlDirection.xlToRight)))

我在我需要的所有字段中都得到了正确的结果。
第二次当我需要获得另一行时,我会:

range.get_Range(range.Cells.get_Item(13, 3),
             range.Cells.get_Offset(13, 3).get_End(Excel.XlDirection.xlToRight)))

这次它给了我除了最后一个之外的所有元素。我还有更多这样的函数,有些带有 XlDirection.xlDown,它们都返回了没有最后一个元素的范围。

我尝试交换函数,认为可能是我需要释放范围然后再次获取它或其他东西(想检查它是否总是只对正在执行的第一个函数有效),但它总是只对第一个示例有效,每当函数正在执行时......

这更奇怪,因为它在VBA Excel中工作。

我也厌倦了Excel.Application get_Range和Excel.Worksheet get_Range...

有人知道为什么会这样吗?

C# 互操作 Excel 范围 get_End 返回的元素少 1 个

我设法解决了这种奇怪的行为。这不是获取数据的正确方法。

正确的方法是:range.get_Range(range.Cells[6, 2], (range.Cells[6, 2] as Excel.Range).get_End(Excel.XlDirection.xlToRight)) - 对于第一个示例。

希望它对某人有所帮助...