Návod: Programování pro Office v jazyce C#

Jazyk C# nabízí funkce, které zlepšují programování systém Microsoft Office. Mezi užitečné funkce jazyka C# patří pojmenované a volitelné argumenty a návratové hodnoty typu dynamic. V programování modelu COM můžete klíčové slovo vynechat ref a získat přístup k indexovaným vlastnostem.

Oba jazyky umožňují vkládání informací o typu, což umožňuje nasazení sestavení, která komunikují s komponentami modelu COM bez nasazení primárních sestavení vzájemné spolupráce (PIA) do počítače uživatele. Další informace naleznete v tématu Návod: Vkládání typů ze spravovaných sestavení.

Tento názorný postup ukazuje tyto funkce v kontextu programování Office, ale mnohé z těchto funkcí jsou také užitečné v obecném programování. V názorném postupu použijete k vytvoření excelového sešitu aplikaci Doplněk excelu. Dále vytvoříte wordový dokument, který obsahuje odkaz na sešit. Nakonec zjistíte, jak povolit a zakázat závislost PIA.

Důležité

VSTO (Visual Studio Tools for Office) spoléhá na rozhraní .NET Framework. Doplňky modelu COM lze také napsat pomocí rozhraní .NET Framework. Doplňky pro Office nelze vytvořit pomocí .NET Core a .NET 5 nebo novějších, nejnovějších verzí .NET. Důvodem je to, že .NET Core/.NET 5+ nemůže spolupracovat s rozhraním .NET Framework ve stejném procesu a může vést k selháním načítání doplňků. K psaní doplňků VSTO a COM pro Office můžete dál používat rozhraní .NET Framework. Microsoft nebude aktualizovat VSTO ani doplňkovou platformu MODELU COM, aby používala .NET Core nebo .NET 5+. Pokud chcete vytvořit serverovou stranu webových doplňků Office, můžete využít rozhraní .NET Core a .NET 5 nebo novější, včetně ASP.NET Core.

Požadavky

Abyste mohli tento návod dokončit, musíte mít v počítači nainstalovaný systém Microsoft Office Excel a systém Microsoft Office Word.

Poznámka

Váš počítač může v následujících pokynech zobrazovat odlišné názvy nebo umístění některých prvků uživatelského rozhraní sady Visual Studio. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení integrovaného vývojového prostředí.

Nastavení excelové aplikace doplňku

  1. Spusťte Visual Studio.
  2. V nabídce Soubor přejděte na příkaz Nový a vyberte Projekt.
  3. V podokně Nainstalované šablony rozbalte C#, rozbalte Office a vyberte rok verze produktu Office.
  4. V podokně Šablony vyberte doplněk excelové <verze>.
  5. V horní části podokna Šablony se ujistěte, že se v poli Cílové rozhraní zobrazí rozhraní .NET Framework 4 nebo novější verze.
  6. Pokud chcete, zadejte název projektu do pole Název .
  7. Vyberte OK.
  8. Nový projekt se zobrazí v Průzkumník řešení.

Přidání odkazů

  1. V Průzkumník řešení klikněte pravým tlačítkem myši na název projektu a pak vyberte Přidat odkaz. Zobrazí se dialogové okno Přidat odkaz .
  2. Na kartě Sestavení vyberte Microsoft.Office.Interop.Excel, verzi <version>.0.0.0 (pro klíč k číslům verzí produktů Office, viz Microsoft Versions), v seznamu Název součásti a podržte stisknutou klávesu CTRL a vyberte Microsoft.Office.Interop.Word, version <version>.0.0.0. Pokud sestavení nevidíte, budete je možná muset nainstalovat (viz Postup: Instalace primárních sestavení vzájemné spolupráce Office).
  3. Vyberte OK.

Přidání nezbytných příkazů Imports nebo direktiv using

V Průzkumník řešení klikněte pravým tlačítkem myši na soubor ThisAddIn.cs a pak vyberte Zobrazit kód. Pokud ještě neexistují, přidejte do horní části souboru kódu následující using direktivy (C#).

using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;

Vytvoření seznamu bankovních účtů

V Průzkumník řešení klikněte pravým tlačítkem na název projektu, vyberte Přidat a pak vyberte Třídu. Pojmenujte třídu Account.cs. Vyberte Přidat. Nahraďte definici Account třídy následujícím kódem. Definice tříd používají automaticky implementované vlastnosti.

class Account
{
    public int ID { get; set; }
    public double Balance { get; set; }
}

Chcete-li vytvořit bankAccounts seznam, který obsahuje dva účty, přidejte následující kód do ThisAddIn_Startup metody v ThisAddIn.cs. Deklarace seznamu používají inicializátory kolekce.

var bankAccounts = new List<Account>
{
    new Account
    {
        ID = 345,
        Balance = 541.27
    },
    new Account
    {
        ID = 123,
        Balance = -127.44
    }
};

Export dat do Excelu

Do stejného souboru přidejte následující metodu ThisAddIn do třídy. Metoda nastaví excelový sešit a exportuje do něj data.

void DisplayInExcel(IEnumerable<Account> accounts,
           Action<Account, Excel.Range> DisplayFunc)
{
    var excelApp = this.Application;
    // Add a new Excel workbook.
    excelApp.Workbooks.Add();
    excelApp.Visible = true;
    excelApp.Range["A1"].Value = "ID";
    excelApp.Range["B1"].Value = "Balance";
    excelApp.Range["A2"].Select();

    foreach (var ac in accounts)
    {
        DisplayFunc(ac, excelApp.ActiveCell);
        excelApp.ActiveCell.Offset[1, 0].Select();
    }
    // Copy the results to the Clipboard.
    excelApp.Range["A1:B3"].Copy();
}
  • Metoda Addvolitelný parametr pro zadání konkrétní šablony. Volitelné parametry umožňují vynechat argument pro tento parametr, pokud chcete použít výchozí hodnotu parametru. Vzhledem k tomu, že předchozí příklad neobsahuje žádné argumenty, Add použije výchozí šablonu a vytvoří nový sešit. Ekvivalentní příkaz v dřívějších verzích jazyka C# vyžaduje zástupný argument: excelApp.Workbooks.Add(Type.Missing). Další informace naleznete v tématu Pojmenované a Volitelné argumenty.
  • Vlastnosti Range objektu Range používají funkci indexovaných vlastností.Offset Tato funkce umožňuje využívat tyto vlastnosti z typů modelu COM pomocí následující typické syntaxe jazyka C#. Indexované vlastnosti také umožňují použít Value vlastnost objektu Range , což eliminuje potřebu použití Value2 vlastnosti. Vlastnost Value je indexována, ale index je volitelný. Volitelné argumenty a indexované vlastnosti spolupracují v následujícím příkladu.
// Visual C# 2010 provides indexed properties for COM programming.
excelApp.Range["A1"].Value = "ID";
excelApp.ActiveCell.Offset[1, 0].Select();

Indexované vlastnosti nemůžete vytvářet sami. Tato funkce podporuje pouze spotřebu existujících indexovaných vlastností.

Na konec DisplayInExcel přidejte následující kód a upravte šířky sloupců tak, aby odpovídaly obsahu.

excelApp.Columns[1].AutoFit();
excelApp.Columns[2].AutoFit();

Tyto doplňky ukazují další funkci jazyka C#: zpracování Object hodnot vrácených z hostitelů modelu COM, jako je Office, jako by měly typ dynamické. Objekty MODELU COM se považují za dynamic automaticky, pokud má funkce Embed Interop Types výchozí hodnotu True, nebo ekvivalentní, pokud odkazujete na sestavení s možností kompilátoru EmbedInteropTypes . Další informace o vkládání typů interoperability naleznete v postupech "Vyhledání odkazu PIA" a "Obnovení závislosti PIA" dále v tomto článku. Další informace o nástroji , naleznete v dynamictématu dynamické nebo použití typu dynamické.

Vyvolání displayInExcel

Na konec ThisAddIn_StartUp metody přidejte následující kód. Volání obsahuje DisplayInExcel dva argumenty. Prvním argumentem je název seznamu zpracovaných účtů. Druhým argumentem je víceřádkový výraz lambda definující způsob zpracování dat. Hodnoty ID a balance hodnoty pro každý účet se zobrazí v sousedních buňkách a řádek se zobrazí červeně, pokud je zůstatek menší než nula. Další informace najdete v tématu Výrazy lambda.

DisplayInExcel(bankAccounts, (account, cell) =>
// This multiline lambda expression sets custom processing rules
// for the bankAccounts.
{
    cell.Value = account.ID;
    cell.Offset[0, 1].Value = account.Balance;
    if (account.Balance < 0)
    {
        cell.Interior.Color = 255;
        cell.Offset[0, 1].Interior.Color = 255;
    }
});

Program spustíte stisknutím klávesy F5. Zobrazí se excelový list, který obsahuje data z účtů.

Přidání wordového dokumentu

Na konec ThisAddIn_StartUp metody přidejte následující kód pro vytvoření wordového dokumentu, který obsahuje odkaz na excelový sešit.

var wordApp = new Word.Application();
wordApp.Visible = true;
wordApp.Documents.Add();
wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);

Tento kód ukazuje několik funkcí jazyka C#: schopnost vynechat ref klíčové slovo v programování modelu COM, pojmenovaných argumentů a volitelných argumentů. Metoda PasteSpecial má sedm parametrů, z nichž všechny jsou volitelné referenční parametry. Pojmenované a volitelné argumenty umožňují určit parametry, ke které chcete získat přístup podle názvu, a odesílat argumenty pouze těmto parametrům. V tomto příkladu argumenty označují vytvoření odkazu na sešit ve schránce (parametr Link) a zobrazení odkazu v dokumentu aplikace Word jako ikony (parametr DisplayAsIcon). Jazyk C# také umožňuje vynechat ref klíčové slovo pro tyto argumenty.

Spuštění aplikace

Stisknutím klávesy F5 spusťte aplikaci. Excel spustí a zobrazí tabulku, která obsahuje informace ze dvou účtů v bankAccountsaplikaci . Zobrazí se wordový dokument, který obsahuje odkaz na excelovou tabulku.

Vyčištění dokončeného projektu

V sadě Visual Studio vyberte v nabídce Sestavení možnost Vyčistit řešení. V opačném případě se doplněk spustí při každém otevření Excelu na počítači.

Vyhledání odkazu PIA

  1. Spusťte aplikaci znovu, ale nevybírejte možnost Vyčistit řešení.
  2. Vyberte tlačítko Start. Vyhledejte verzi> sady Microsoft Visual Studio <a otevřete příkazový řádek pro vývojáře.
  3. Zadejte ildasm příkazový řádek pro vývojáře pro okno sady Visual Studio a stiskněte klávesu ENTER. Zobrazí se okno IL DASM.
  4. V nabídce Soubor v okně IL DASM vyberte Otevřít soubor>. Poklikejte na verzi> sady Visual Studio <a potom poklikejte na projekty. Otevřete složku projektu a vyhledejte složku bin/Debug pro název projektu.dll. Poklikejte na název projektu.dll. V novém okně se kromě odkazů na další moduly a sestavení zobrazí atributy projektu. Sestavení obsahuje obory Microsoft.Office.Interop.Excel názvů a Microsoft.Office.Interop.Word. Kompilátor ve výchozím nastavení v sadě Visual Studio importuje typy, které potřebujete, z odkazované PIA do sestavení. Další informace naleznete v tématu Postupy: Zobrazení obsahu sestavení.
  5. Poklikejte na ikonu MANIFESTu. Zobrazí se okno, které obsahuje seznam sestavení, která obsahují položky odkazované projektem. Microsoft.Office.Interop.Excel a Microsoft.Office.Interop.Word nejsou v seznamu. Vzhledem k tomu, že jste do sestavení naimportovali typy, které projekt potřebuje, nemusíte instalovat odkazy na PIA. Import typů do sestavení usnadňuje nasazení. PiA nemusí být přítomné na počítači uživatele. Aplikace nevyžaduje nasazení konkrétní verze PIA. Aplikace můžou pracovat s několika verzemi Office za předpokladu, že potřebná rozhraní API existují ve všech verzích. Vzhledem k tomu, že nasazení pia už není nutné, můžete vytvořit aplikaci v pokročilých scénářích, které fungují s několika verzemi Office, včetně předchozích verzí. Váš kód nemůže používat žádná rozhraní API, která nejsou dostupná ve verzi Office, se kterou pracujete. Není vždy jasné, jestli bylo konkrétní rozhraní API dostupné v dřívější verzi. Práce s dřívějšími verzemi Office se nedoporučuje.
  6. Zavřete okno manifestu a okno sestavení.

Obnovení závislosti PIA

  1. V Průzkumník řešení vyberte tlačítko Zobrazit všechny soubory. Rozbalte složku Reference a vyberte Microsoft.Office.Interop.Excel. Stisknutím klávesy F4 zobrazte okno Vlastnosti .
  2. V okně Vlastnosti změňte vlastnost Embed Interop Types z True na False.
  3. Opakujte kroky 1 a 2 v tomto postupu pro Microsoft.Office.Interop.Word.
  4. V jazyce C# zakomentujte dvě volání na Autofit konci DisplayInExcel metody.
  5. Stisknutím klávesy F5 ověřte, že projekt stále běží správně.
  6. Opakováním kroků 1 až 3 z předchozího postupu otevřete okno sestavení. Všimněte si, že Microsoft.Office.Interop.Word v Microsoft.Office.Interop.Excel seznamu vložených sestavení už nejsou.
  7. Poklikejte na ikonu MANIFESTu a projděte seznam odkazovaných sestavení. Obě Microsoft.Office.Interop.Word a Microsoft.Office.Interop.Excel jsou v seznamu. Vzhledem k tomu, že aplikace odkazuje na kódy PIA aplikace Excel a Word, a vlastnost Embed Interop Types je False, obě sestavení musí existovat na počítači koncového uživatele.
  8. V sadě Visual Studio vyberte v nabídce Sestavení možnost Vyčistit řešenía vyčistíte dokončený projekt.

Viz také