2011-09-23 101 views
2

我试图找出使用C#.NETC#的COM OLE服务器

我发现一些代码,实现与COM +,似乎对OLE服务器,但我工作的互动与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); 

显然,在我的情况下,我把我在Excel.Application是OLE服务器的名字,但我所看到的情况下,早期的结合,其中你可以直接从对象调用函数,而不必通过'InvokeMember'

这可能吗?我可以使用Type来投射为我的类型的对象吗?

谢谢。

+0

这就是所谓的COM,而不是OLE。 OLE已经死了,现在被埋了一段时间。这将帮助您在添加引用对话框中找到选项卡。 –

+0

显然,我想引用的是一个OLE服务器,它当然是一个.exe的应用程序,并且是自注册的...我知道COM +是OLE的诞生,但这是一个OLE服务器。 –

+0

然后使用添加引用对话框中的OLE选项卡:) –

回答

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; 
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; 
+0

不添加引用会尽早进行绑定吗?另外,Excel只是另一个ole服务器的一个例子。 –