Сервер C # Com OLE - PullRequest
       41

Сервер C # Com OLE

2 голосов
/ 23 сентября 2011

Я пытаюсь выяснить лучший способ взаимодействия с OLE-сервером с использованием C # .NET

Я нашел некоторый код, который позволяет взаимодействовать с 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, но я видел случаи раннего связывания, когда вы можете вызывать функцию непосредственно из объекта без необходимости проходить через 'InvokeMember'

Возможно ли это?Могу ли я использовать Type для приведения в качестве объекта в качестве моего типа?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 23 сентября 2011

Если вы используете .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 голосов
/ 23 сентября 2011

Попробуйте взглянуть на это по ссылкам добавления. Это дает вам полезный доступ к 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;
...