Vazba pro automatizační servery Office pomocí aplikace Visual C# .NET

Souhrn

Při automatizaci aplikace, například aplikace Microsoft Office volání vlastností a metod objektů aplikací sady Office musí být připojen nějakým způsobem na tyto objekty. Proces připojování vlastnost a volání metod na objekty, které implementují tyto vlastnosti a metody se běžně nazývá vazba. V jazyce Visual C#, dva typy vazby, které jsou k dispozici jsou časná vazba a pozdní vazba. Typ vazby, který zvolíte, může ovlivnit mnoho aspektů vašeho programu, včetně výkonu, pružnosti a udržovatelnosti.

Tento článek popisuje a porovnává včasné a pozdní vazby pro Visual C# automatizace klienty a poskytuje ukázky kódu, které ukazují oba typy vazby.

Statická vazba

Pomocí časná vazba Visual C# používá typ informací, které jsou k dispozici o aplikaci Office dotyčný vytvořit vazbu přímo do metody nebo vlastnosti, které je třeba použít. Kompilátor může provádět typu a syntaxe zkontroluje, ujistěte se, že správné číslo a typ parametry jsou předány do metoda nebo vlastnost a že vrácená hodnota bude očekávaného typu. Vzhledem k tomu, že v době běhu volání na vlastnost nebo metodu je požadováno méně práce, časné vazby je někdy rychlejší; časná vazba může být rychlejší, výkon rozdíly ve srovnání s pozdní vazbou jsou však často zanedbatelný.

Časné vazby mají menší nevýhodou, že jej zavést verze možné problémy s kompatibilitou. Předpokládejme například, že automatizační server, jako je například aplikace Microsoft Excel 2002 zavádí novou metodu nebo vlastnost, která byla k dispozici v aplikaci Excel 2000 nebo provedené změny existující vlastnost nebo metoda. Tyto změny mohou změnit binární rozložení objektu a způsobit problémy s aplikací Visual C#, který používá informace o typu Excel 2002 k automatizaci aplikace Excel 2000. Chcete-li se tomuto problému vyhnout pomocí časná vazba, je doporučeno použít informace o typu pro nejstarší verzi aplikace Office, které chcete podporu při vývoji a testování klienta automatizace.

Následující kroky ukazují, jak vytvořit automatizace klienta, který používá časná vazba. Nezapomeňte, že jako znázornění kroků, časné vazby vyžaduje vám odkazovat na knihovnu typů pro klienta automatizace.

Vytvoření klienta automatizace, který používá časná vazba

  1. Spusťte aplikaci Visual Studio .NET. V nabídce soubor klepněte na příkaz Nový a klepněte na příkaz projekt. Vyberte Aplikace Windows z typů projekty Visual C#. Ve výchozím nastavení je vytvořen formulář Form1.
  2. Přidáte odkaz na Knihovna objektů Microsoft Excel. Chcete-li to provést, postupujte takto:
    1. V nabídce projekt klepněte na tlačítko Přidat odkaz.
    2. Na kartě COM vyhledejteObjektové knihovny Microsoft Excel a klepněte na tlačítko Vybrat.

      Poznámka: Office 2003 zahrnuje primární sestavení Interop (PIA). Sada Office XP nezahrnuje sestavení PIA, ale mohou být staženy.
      Další informace o sestaveních PIA sady Office XP klepněte na následující číslo článku databáze Microsoft Knowledge Base:
      328912 Microsoft Office XP primární sestavení interop (PIA) jsou k dispozici ke stažení

    3. Klepněte na tlačítko OK v dialogovém okně Přidat odkazy potvrďte výběr. Pokud se zobrazí výzva ke generování obálky pro vybrané knihovny, klepněte na tlačítko Ano.
  3. V nabídce Zobrazit vyberte zobrazení panelu nástrojů a přidat tlačítko do formuláře Form1.
  4. Poklepejte na Button1. Zobrazí se okno kód pro formulář.
  5. V okně kódu nahraďte následující kód
    private void button1_Click(object sender, System.EventArgs e){
    }

    s:
    private void button1_Click(object sender, System.EventArgs e){
    Excel.Application objApp;
    Excel._Workbook objBook;
    Excel.Workbooks objBooks;
    Excel.Sheets objSheets;
    Excel._Worksheet objSheet;
    Excel.Range range;

    try
    {
    // Instantiate Excel and start a new workbook.
    objApp = new Excel.Application();
    objBooks = objApp.Workbooks;
    objBook = objBooks.Add( Missing.Value );
    objSheets = objBook.Worksheets;
    objSheet = (Excel._Worksheet)objSheets.get_Item(1);

    range = objSheet.get_Range("A1", Missing.Value);

    range.set_Value(Missing.Value, "Hello, World!" );

    //Return control of Excel to the user.
    objApp.Visible = true;
    objApp.UserControl = true;
    }
    catch( Exception theException )
    {
    String errorMessage;
    errorMessage = "Error: ";
    errorMessage = String.Concat( errorMessage, theException.Message );
    errorMessage = String.Concat( errorMessage, " Line: " );
    errorMessage = String.Concat( errorMessage, theException.Source );

    MessageBox.Show( errorMessage, "Error" );
    }
    }

  6. Přejděte do horní části okna kód. Přidejte následující řádek na konec seznamu pomocí direktivy:
    using System.Reflection;using Excel = Microsoft.Office.Interop.Excel;

Pozdní vazba

Na rozdíl od časná vazba pozdní vazby čeká, dokud běhu svázat vlastnosti a metody volání do jejich objektů. Chcete-li to provést, je cílový objekt musí implementovat speciální rozhraní modelu COM: IDispatch. Metoda funkce IDispatch::GetIDsOfNames umožňuje Visual C# k dotazování objektu o jaké metody a vlastnosti, které podporuje a metoda volání metody IDispatch::Invoke klepněte Visual C# při volání těchto metod a vlastností. Tímto způsobem pozdní vazba má výhod odstraněním některých verzi závislostí, které jsou spojené s časná vazba. Má však Nevýhodou odebrání kompilaci kontroly integrity automatizace kód, jakož i neposkytuje funkce technologie Intellisense, které mohou poskytnout vodítko k opravě volání metody a vlastnosti.

Chcete-li použít pozdní vazba v jazyce Visual C#, použijte metodu System.Type.InvokeMember . Tato metoda volá funkce IDispatch::GetIDsOfNames a volání metody IDispatch::Invoke navázat k metodám a vlastnostem Automation server.

Vytvoření klienta automatizace, který používá pozdní vazba

  1. Spusťte aplikaci Visual Studio .NET. V nabídce soubor klepněte na příkaz Nový a klepněte na příkaz projekt. Vyberte Aplikace Windows z typů projekty Visual C#. Ve výchozím nastavení je vytvořen formulář Form1.
  2. V nabídce Zobrazit vyberte zobrazení panelu nástrojů a přidat tlačítko do formuláře Form1.
  3. Poklepejte na Button1. Zobrazí se okno kód pro formulář.
  4. V okně kódu nahraďte následující kód
    private void button1_Click(object sender, System.EventArgs e){
    }

    s:
    private void button1_Click(object sender, System.EventArgs e){
    object objApp_Late;
    object objBook_Late;
    object objBooks_Late;
    object objSheets_Late;
    object objSheet_Late;
    object objRange_Late;
    object[] Parameters;

    try
    {
    // Get the class type and instantiate Excel.
    Type objClassType;
    objClassType = Type.GetTypeFromProgID("Excel.Application");
    objApp_Late = Activator.CreateInstance(objClassType);

    //Get the workbooks collection.
    objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks",
    BindingFlags.GetProperty, null, objApp_Late, null );

    //Add a new workbook.
    objBook_Late = objBooks_Late.GetType().InvokeMember( "Add",
    BindingFlags.InvokeMethod, null, objBooks_Late, null );

    //Get the worksheets collection.
    objSheets_Late = objBook_Late.GetType().InvokeMember( "Worksheets",
    BindingFlags.GetProperty, null, objBook_Late, null );

    //Get the first worksheet.
    Parameters = new Object[1];
    Parameters[0] = 1;
    objSheet_Late = objSheets_Late.GetType().InvokeMember( "Item",
    BindingFlags.GetProperty, null, objSheets_Late, Parameters );

    //Get a range object that contains cell A1.
    Parameters = new Object[2];
    Parameters[0] = "A1";
    Parameters[1] = Missing.Value;
    objRange_Late = objSheet_Late.GetType().InvokeMember( "Range",
    BindingFlags.GetProperty, null, objSheet_Late, Parameters );

    //Write "Hello, World!" in cell A1.
    Parameters = new Object[1];
    Parameters[0] = "Hello, World!";
    objRange_Late.GetType().InvokeMember( "Value", BindingFlags.SetProperty,
    null, objRange_Late, Parameters );

    //Return control of Excel to the user.
    Parameters = new Object[1];
    Parameters[0] = true;
    objApp_Late.GetType().InvokeMember( "Visible", BindingFlags.SetProperty,
    null, objApp_Late, Parameters );
    objApp_Late.GetType().InvokeMember( "UserControl", BindingFlags.SetProperty,
    null, objApp_Late, Parameters );
    }
    catch( Exception theException )
    {
    String errorMessage;
    errorMessage = "Error: ";
    errorMessage = String.Concat( errorMessage, theException.Message );
    errorMessage = String.Concat( errorMessage, " Line: " );
    errorMessage = String.Concat( errorMessage, theException.Source );

    MessageBox.Show( errorMessage, "Error" );
    }
    }

  5. Přejděte do horní části okna kód. Přidejte následující řádek na konec seznamu pomocí direktivy:
    using System.Reflection; 

Odkazy

Další informace naleznete následujícím webu Microsoft Developer Network (MSDN):
Vývoj sady Microsoft Office s aplikací Visual Studio
http://msdn2.microsoft.com/en-us/library/aa188489(office.10).aspx
Další informace o vazbách klepněte na následující čísla článku zobrazení v článcích znalostní báze Microsoft Knowledge Base:
245115 pomocí časná vazba a pozdní vazba v automatizaci

244167 zápis klientům automatizace více verzí sady Office

247579 použití DISPID vazby k automatizaci aplikace sady Office, pokud je to možné

Vlastnosti

ID článku: 302902 - Poslední kontrola: 19. 1. 2017 - Revize: 1

Váš názor