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...
有人知道为什么会这样吗?
我设法解决了这种奇怪的行为。这不是获取数据的正确方法。
正确的方法是:range.get_Range(range.Cells[6, 2], (range.Cells[6, 2] as Excel.Range).get_End(Excel.XlDirection.xlToRight))
- 对于第一个示例。
希望它对某人有所帮助...