互操作程序集embedded到.NET 4.0中时缺lessExcel get_Range
我build立一个引用COM interop DLL的程序集。 如果通过在引用的属性(VS2010)中将Embed Interop Types设置为True来embeddedCOM互操作types,则在运行时会发生错误“对象不包含get_Range的定义”。 如果COM互操作types没有embedded,则不会发生错误。
有谁知道为什么应该省略一个特定的方法,Worksheet.get_Range或如何解决这个问题或有任何其他相关的见解? 我应该感激任何帮助。
interop dll包含对Worksheet.get_Range(object,[object])的引用。 在我的调用程序集上使用reflection器时,没有提及Worksheet下的get_Range。
我embedded的互操作程序集是从Excel9.olb生成的。 我不使用PIA作为应用程序的目标多个Excel版本。
我还没有尝试过,但是我相信,在C#4.0下使用embedded式COM Interoptypes时,语法已经改变了,使其更加“C#友好”的语法。
因此,可以不用查找get_Range(object, [object])
方法,而是省略可选参数(而不是必须提供Type.Missing
),也可以避免完全调用get访问器,而是引用属性名称使用方括号:
// Using C# 3.0: Excel.Range range = worksheet.get_Range("A1", Type.Missing); // Using C# 4.0, omitting the optional parameter: Excel.Range range = worksheet.get_Range("A1"); // Using C# 4.0, utilizing square-bracket indexing: Excel.Range range = worksheet.Range["A1"];
不过,据我所知,你仍然可以称之为“旧方式”,新的索引器语法在后台真正调用所需的“get”和“set”访问器,所以我不知道为什么你有麻烦。 我的猜测是,你需要查看在IntelliSense列表中的Worksheet.Range
而不是Worksheet.get_Range
。 如果这对您不适用,那么您的设置或安装听起来可能是错误的。
有关详细信息,请参阅:Kirill Osenkov 在C#4.0中的索引属性 。
希望这可以帮助…
麦克风
这是微软在testing阶段提出的一个错误,在https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=530769&wa=wsignin1.0,并且在RTM之后被解决为By Design。 Mike Rosenblum的答案在那里获得批准。
这可以概括为Excel.Range r = sh.Range [sh.Cells [1,1],sh.Cells [2,2]]; 其中sh是一个工作表。
- Excel的当前格式在Closedxml SaveAs方法中得到了改变
- 如何在Excel中创build基于模板的用户可定制报告
- 是否有使用Office模板的.Net报告工具?
- 导入Excel提供错误“System.InvalidOperationException:Microsoft.Jet.OLEDB.4.0”提供程序未注册“
- 无法使用.Net4.0中的Process.Start()打开Excel文件
- 不知道为什么我得到Excel文件的System.Data.OleDb.OleDbException
- 类库中带有服务引用的Excel加载项无法连接
- 将Excel中的图像导出到一行的单元格中
- 如何在Windows窗体上显示office和/或pdf内容?