gpt4 book ai didi

C# Interop Non-invocable 成员 'Microsoft.Office.Interop.Excel.Range.End' 不能像方法一样使用

转载 作者:行者123 更新时间:2023-11-30 15:18:41 29 4
gpt4 key购买 nike

我正在使用 C# Interop 从工作表中获取一些值,但出现以下错误:

Non-invocable member 'Microsoft.Office.Interop.Excel.Range.End' cannot be used like a method.

这是我的代码:

var wb = (Excel.Workbook)Globals.ThisAddIn.Application.ActiveWorkbook;
var wsEvars = wb.Sheets["Evars"];
var wsProps = wb.Sheets["Props"];
var wsEvents = wb.Sheets["Events"];
var wsListVars = wb.Sheets["List Vars"];

var sheetList = new Excel.Worksheet[] { wsEvars, wsProps, wsEvents, wsListVars };

for (var i = 0; i < sheetList.Length; i++)
{
// I get the error on the line below
var rowLast = sheetList[i].Range["I" + sheetList[i].Rows.Count].End(Excel.XlDirection.xlUp).Row;
}

问题是,如果我尝试如下操作,那是可行的:

for (var i = 0; i < sheetList.Length; i++)
{
var rowLast = wsEvars .Range["I" + wsEvars .Rows.Count].End(Excel.XlDirection.xlUp).Row;
}

我错过了什么吗?

最佳答案

您似乎在 C# 编译器中发现了错误。该错误实际上存在于解决方法中,它应该不会编译,原因与第一个代码段没有编译的原因相同。尽管很难确定这是一个错误,但 C# 语言规范并未描述在这种情况下什么是可接受的。

Range.End 属性是一个索引 属性。 C# 不正式支持此类属性,该语言仅允许类索引器(也称为 this[])作为类的唯一索引属性。但在 C# 版本 4 中取消了该限制,专门用于简化与 COM 服务器的互操作。与 Excel 一样,索引属性在 COM 对象模型中非常常见。

与普通索引器一样,您必须使用方括号。修复:

    var rowLast = sheetList[i].Range["I" + sheetList[i].Rows.Count]
.End[Excel.XlDirection.xlUp].Row;

并且您必须在旧 C# 版本中使用的解决方法仍然可用:

    var rowLast = sheetList[i].Range["I" + sheetList[i].Rows.Count]
.get_End(Excel.XlDirection.xlUp).Row;

很难猜出为什么它在第二个片段中发现 () 括号是可接受的。它长得像 bug ,游起来像 bug ,叫声也像 bug ,所以它很可能是 bug 。点击 New Issue button 让他们知道.我怀疑他们会修复它,但问题可能比表面上看的要多。

关于C# Interop Non-invocable 成员 'Microsoft.Office.Interop.Excel.Range.End' 不能像方法一样使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43317699/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com