C#Com OLE服务器

时间:2011-09-23 09:47:50

标签: c# .net com ole

我正在尝试找出使用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作为对象进行转换吗?

感谢。

2 个答案:

答案 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;