我正在尝试找出使用C#.NET与OLE服务器进行交互的最佳方式
我找到了一些能够与COM +交互的代码,它似乎适用于OLE服务器,但我想知道是否有更优雅或更简单的方法?
我要求它迟到。
代码(从网上其他地方窃取)
// Code start
Type excel;
object[] parameter = new object[1];
object excelObject;
try
{
//Get the excel object
excel = Type.GetTypeFromProgID("Excel.Application");
//Create instance of excel
excelObject = Activator.CreateInstance(excel);
//Set the parameter whic u want to set
parameter[0] = true;
//Set the Visible property
excel.InvokeMember("Visible", BindingFlags.SetProperty, null, excelObject, parameter);
显然在我的情况下,我将我的ole服务器的名称放在Excel.Application所在的位置,但是我已经看到了EARLY绑定中的情况,您可以直接从对象调用该函数而无需通过'InvokeMember'< / p>
这可能吗?我可以使用Type作为对象进行转换吗?
感谢。
答案 0 :(得分:4)
如果您使用的是.NET 4.0,则可以使用dynamic
而不是object
来调用成员,就好像它们在那里一样。然后在运行时检查它,如果名称正确,则执行它。
//Get the excel object
var excel = Type.GetTypeFromProgID("Excel.Application");
//Create instance of excel
dynamic excelObject = Activator.CreateInstance(excel);
excelObject.Visible = true;
答案 1 :(得分:0)
尝试从添加引用中查看此内容。它为您提供了有用的Excel访问权限。 Microsoft.Office.Core 的Microsoft.Office.Interop.Excel
using Excel = Microsoft.Office.Interop.Excel;
...
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
Excel.Application app;
Excel.Workbook workbook;
app = new Excel.ApplicationClass();
app.AutomationSecurity = Microsoft.Office.Core.MsoAutomationSecurity.msoAutomationSecurityForceDisable;
workbook = app.Workbooks.Open( openFileDialog.FileName,
0,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing,
Type.Missing);
return workbook;
}
可以像这样访问单元格和工作表等:
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets.Item[1];
worksheet.Cells.Item[6, 1]).Value;