Sdílet prostřednictvím


Postupy: Přístup k objektům Interop sady Office pomocí funkcí Visual C# (Průvodce programováním v C#)

Visual C# 2010 zavádí nové funkce, které usnadňují přístup k rozhraní API Office objekty.Nové funkce patří pojmenované a volitelné argumenty, nový typ s názvem dynamica umožňuje předáním argumentů odkaz na parametry metod modelu COM, jako kdyby šlo o hodnoty parametrů.

V tomto tématu budou používat nové funkce pro psaní kódu, který vytvoří a zobrazí listu aplikace Microsoft Office Excel.Pak budete psát kód k přidání dokumentu Office Word, který obsahuje ikonu, která je spojena listu aplikace Excel.

K dokončení tohoto průvodce, musí mít aplikace Microsoft Office Excel 2007 a Microsoft Office Word 2007 nebo novější verze, v počítači nainstalována.

Pokud používáte operační systém, který je starší než Windows Vista, ujistěte se, že .NET Framework 2,0 je nainstalován.

[!POZNÁMKA]

Na vašem počítači se můžou v následujících pokynech zobrazovat jiné názvy nebo umístění některých prvků uživatelského rozhraní Visual Studia. Tyto prvky jsou určeny edicí sady Visual Studio a použitým nastavením. Další informace najdete v tématu Přizpůsobení nastavení pro vývoj v sadě Visual Studio.

Chcete-li vytvořit novou aplikaci konzoly

  1. Spuštění sady Visual Studio.

  2. Na soubor nabídce přejděte na novýa potom klikněte na tlačítko projektu.Zobrazí se dialogové okno Nový projekt.

  3. V nainstalované šablony podokně rozbalte **Visual C#**a potom klikněte na tlačítko Windows.

  4. Podívejte se na horní části nový projekt dialogové okno, abyste měli jistotu, že rozhraní .NET Framework 4 (nebo novější) je vybrán jako cílové rozhraní.

  5. V šablony podokně klikněte na tlačítko aplikace konzoly.

  6. Zadejte název pro váš projekt v název pole.

  7. Klikněte na tlačítko OK.

    Nový projekt se zobrazí v Průzkumníka řešení.

Chcete-li přidat odkazy

  1. V Průzkumníka řešení, klikněte pravým tlačítkem na název vašeho projektu a potom klikněte na tlačítko přidat odkaz.Zobrazí se dialogové okno Přidat odkaz.

  2. Na sestavení stránky, vyberte možnost Microsoft.Office.Interop.Word v název komponenty seznamu a poté podržte klávesu CTRL klíče a vyberte možnost Microsoft.Office.Interop.Excel.Pokud jste nenalezli sestavení, mohou je třeba zajistit jsou nainstalovány a zobrazí (viz Postupy: Instalace primárních sestavení vzájemné spolupráce pro systém Office)

  3. Klikněte na tlačítko OK.

Chcete-li přidat nezbytné pomocí direktivy

  1. V Průzkumníka řešení, klikněte pravým tlačítkem myši Program.cs soubor a potom klikněte na tlačítko zobrazení kódu.

  2. Přidejte následující using direktivy k hornímu okraji souboru kódu.

    using Excel = Microsoft.Office.Interop.Excel;
    using Word = Microsoft.Office.Interop.Word;
    

Chcete-li vytvořit seznam účtů bank

  1. Vložit následující definici třídy do Program.csv části Program třídy.

    public class Account
    {
        public int ID { get; set; }
        public double Balance { get; set; }
    }
    
  2. Přidat následující kód, který Main metodu pro vytvoření bankAccounts seznam, který obsahuje dva účty.

    // Create a list of accounts. 
    var bankAccounts = new List<Account> {
        new Account { 
                      ID = 345678,
                      Balance = 541.27
                    },
        new Account {
                      ID = 1230221,
                      Balance = -127.44
                    }
    };
    

Chcete-li deklarovat metodu, která exportuje informace o účtu do aplikace Excel

  1. Přidat metodu Program třídu lze nastavit listu aplikace Excel.

    Metoda přidat má volitelný parametr pro zadání konkrétní šablonu.Volitelné parametry, které jsou v Visual C# 2010, vám umožní vynechat argument pro tento parametr, pokud chcete použít výchozí hodnoty parametru.Vzhledem k tomu, že žádný argument je odeslána v následujícím kódu, Add , použije se výchozí šablona a vytvoří nový sešit.Příkaz ekvivalentní ve starších verzích jazyka C# vyžaduje argument zástupný text: ExcelApp.Workbooks.Add(Type.Missing).

    static void DisplayInExcel(IEnumerable<Account> accounts)
    {
        var excelApp = new Excel.Application();
        // Make the object visible.
        excelApp.Visible = true;
    
        // Create a new, empty workbook and add it to the collection returned  
        // by property Workbooks. The new workbook becomes the active workbook. 
        // Add has an optional parameter for specifying a praticular template.  
        // Because no argument is sent in this example, Add creates a new workbook. 
        excelApp.Workbooks.Add();
    
        // This example uses a single workSheet. The explicit type casting is 
        // removed in a later procedure.
        Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet;
    }
    
  2. Přidejte následující kód na konci DisplayInExcel.Kód vloží hodnoty do první dva sloupce první řádek textu.

    // Establish column headings in cells A1 and B1.
    workSheet.Cells[1, "A"] = "ID Number";
    workSheet.Cells[1, "B"] = "Current Balance";
    
  3. Přidejte následující kód na konci DisplayInExcel.foreach Cyklu převádí informace ze seznamu účtů do první dva sloupce po sobě jdoucích řádků listu.

    var row = 1;
    foreach (var acct in accounts)
    {
        row++;
        workSheet.Cells[row, "A"] = acct.ID;
        workSheet.Cells[row, "B"] = acct.Balance;
    }
    
  4. Přidejte následující kód na konci DisplayInExcel na šířku sloupců a přizpůsobit obsah.

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

    Starší verze jazyka C# vyžadují explicitní přetypování pro tyto operace, protože ExcelApp.Columns[1] vrací Object, a AutoFit je aplikace Excel rozsahu metody.Následující řádky ukazují přetypování.

    ((Excel.Range)workSheet.Columns[1]).AutoFit();
    ((Excel.Range)workSheet.Columns[2]).AutoFit();
    

    Visual C# 2010a novějších verzí, převede vráceného Object k dynamic automaticky, pokud je odkazovaná sestavení /link možnosti kompilátoru nebo ekvivalentně, pokud v aplikaci Excel Embed Types vzájemná funkční spolupráce je vlastnost nastavena na hodnotu true.Hodnota TRUE je výchozí hodnota této vlastnosti.

Ke spuštění projektu

  1. Přidejte následující řádek na konci Main.

    // Display the list in an Excel spreadsheet.
    DisplayInExcel(bankAccounts);
    
  2. Stisknutím kombinace kláves CTRL + F5.

    Listu aplikace Excel se zobrazí, který obsahuje data z obou účtů.

Chcete-li přidat dokument aplikace Word

  1. Pro ilustraci další způsoby, ve kterém Visual C# 2010a novějších verzí zvyšuje Office programování, následující kód otevře aplikace Word a vytvoří ikonu, který odkazuje na listu aplikace Excel.

    Vložit metoda CreateIconInWordDoc, poskytnutého dále v tomto kroku do Program třídy.CreateIconInWordDocpoužívá pojmenovanou a volitelné argumenty pro zjednodušují volání metody přidat a PasteSpecial.Tato volání začlenit dvou dalších nových funkcí zavedena v Visual C# 2010 zjednodušující volání metod modelu COM, které mají parametry odkazu.První můžete odeslat argumenty parametrům reference jako kdyby šlo o hodnoty parametrů.To znamená můžete odeslat hodnoty přímo, bez vytvoření pro jednotlivé parametry odkaz na proměnnou.Kompilátor generuje dočasné proměnné pro uložení hodnot argument a zahodí proměnných, když se vrátíte z volání.Druhý, můžete vynechat ref klíčové slovo v seznamu argumentů.

    Add Metoda má čtyři referenční parametry, které jsou volitelné.V Visual C# 2010, nebo novější verze, pokud chcete použít výchozí hodnoty, můžete vynechat argumenty pro všechny parametry.V Visual C# 2008 a starších verzích argument musí být poskytnut pro jednotlivé parametry a argument musí být proměnnou, protože parametry jsou parametry odkazu.

    PasteSpecial Metoda vloží obsah schránky.Metoda má sedm referenční parametry, které jsou volitelné.Následující kód určuje argumenty pro dvě z nich: Link, chcete-li vytvořit odkaz na zdroj obsah schránky a DisplayAsIcon, chcete-li zobrazit odkaz jako ikona.V Visual C# 2010, můžete použít pojmenované argumenty pro tyto dva a ostatní vynechat.I když jsou tyto údaje parametry odkaz, není nutné použít ref klíčové slovo, nebo vytváření proměnných k odeslání v jako argumenty.Hodnoty mohou odesílat přímo.V Visual C# 2008 a starších verzích, je nutné odeslat proměnné argument pro jednotlivé parametry reference.

    static void CreateIconInWordDoc()
    {
        var wordApp = new Word.Application();
        wordApp.Visible = true;
    
        // The Add method has four reference parameters, all of which are  
        // optional. Visual C# 2010 allows you to omit arguments for them if 
        // the default values are what you want.
        wordApp.Documents.Add();
    
        // PasteSpecial has seven reference parameters, all of which are  
        // optional. This example uses named arguments to specify values  
        // for two of the parameters. Although these are reference  
        // parameters, you do not need to use the ref keyword, or to create  
        // variables to send in as arguments. You can send the values directly.
        wordApp.Selection.PasteSpecial( Link: true, DisplayAsIcon: true);
    }
    

    V Visual C# 2008 a starších verzích jazyka, následující složitější kód je povinný.

    static void CreateIconInWordDoc2008()
    {
        var wordApp = new Word.Application();
        wordApp.Visible = true;
    
        // The Add method has four parameters, all of which are optional.  
        // In Visual C# 2008 and earlier versions, an argument has to be sent  
        // for every parameter. Because the parameters are reference   
        // parameters of type object, you have to create an object variable 
        // for the arguments that represents 'no value'.  
    
        object useDefaultValue = Type.Missing;
    
        wordApp.Documents.Add(ref useDefaultValue, ref useDefaultValue,
            ref useDefaultValue, ref useDefaultValue);
    
        // PasteSpecial has seven reference parameters, all of which are 
        // optional. In this example, only two of the parameters require 
        // specified values, but in Visual C# 2008 an argument must be sent 
        // for each parameter. Because the parameters are reference parameters, 
        // you have to contruct variables for the arguments. 
        object link = true;
        object displayAsIcon = true;
    
        wordApp.Selection.PasteSpecial( ref useDefaultValue,
                                        ref link,
                                        ref useDefaultValue,
                                        ref displayAsIcon,
                                        ref useDefaultValue,
                                        ref useDefaultValue,
                                        ref useDefaultValue);
    }
    
  2. Přidejte následující výraz na konci Main.

    // Create a Word document that contains an icon that links to 
    // the spreadsheet.
    CreateIconInWordDoc();
    
  3. Přidejte následující výraz na konci DisplayInExcel.Copy Metoda přidá listu do schránky.

    // Put the spreadsheet contents on the clipboard. The Copy method has one 
    // optional parameter for specifying a destination. Because no argument   
    // is sent, the destination is the Clipboard.
    workSheet.Range["A1:B3"].Copy();
    
  4. Stisknutím kombinace kláves CTRL + F5.

    Dokument aplikace Word se zobrazí, který obsahuje ikonu.Poklepejte na ikonu dodali listu do popředí.

Chcete-li nastavit vlastnost Embed Types vzájemná funkční spolupráce

  1. Další vylepšení je možné při volání COM typ, který nevyžaduje primární definiční sestavení (PIA) v době běhu.Odebráním závislosti na výsledky PIA ve verzi nezávisle a snazší nasazení.Další informace o výhodách programování bez PIA naleznete v tématu Návod: Vložení typů ze spravovaných sestavení (C# and Visual Basic).

    Kromě toho programování je to snazší, protože typy, které jsou vyžadována a vrácena metodami COM může být reprezentována pomocí daného typu dynamic namísto Object.Proměnné, které mají typ dynamic nejsou vyhodnotit až do spuštění, která se eliminuje potřeba explicitní přetypování.Další informace naleznete v tématu Použití typu dynamic (Průvodce programováním v C#).

    V Visual C# 2010, je vkládání informací o typu namísto použití PIA výchozí chování.Z důvodu výchozí řadu předchozí příklady jsou zjednodušená vzhledem k tomu, že není vyžadováno explicitní přetypování.Můžete například prohlášení o worksheet v DisplayInExcel je zapsán jako Excel._Worksheet workSheet = excelApp.ActiveSheet místo Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet.Volání na AutoFit ve stejné metodě také by vyžadují explicitní přetypování bez výchozí nastavení, protože ExcelApp.Columns[1] vrací Object, a AutoFit je metoda aplikace Excel.Následující kód ukazuje přetypování.

    ((Excel.Range)workSheet.Columns[1]).AutoFit();
    ((Excel.Range)workSheet.Columns[2]).AutoFit();
    
  2. Chcete-li změnit výchozí nastavení a používat PIA namísto vkládání informací o typu, rozbalte odkazuje na uzel v Průzkumníka řešení a potom vyberte Microsoft.Office.Interop.Excel nebo Microsoft.Office.Interop.Word.

  3. Pokud se nezobrazují vlastnosti okna, stiskněte klávesu F4.

  4. Najít Embed Types vzájemná funkční spolupráce v seznamu vlastností a změnit jeho hodnotu na False.Ekvivalentně, můžete zkompilovat pomocí /reference možnosti kompilátoru namísto /link na příkazovém řádku.

Chcete-li přidat další formátování do tabulky

  1. Nahradit dvě volání AutoFit v DisplayInExcel pomocí následujícího příkazu.

    // Call to AutoFormat in Visual C# 2010.
    workSheet.Range["A1", "B3"].AutoFormat(
        Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
    

    Automatické formátování metoda má sedm hodnotu parametry, které jsou volitelné.Pojmenovaný a nepovinný argument umožňují poskytnout argumenty pro none, některé nebo všechny z nich.V předchozím příkazu je zadán argument pouze pro jeden z parametrů, Format.Protože Format je první parametr v seznamu parametrů nemáte zadat název parametru.Příkaz však může být srozumitelnější, pokud název parametru je zahrnuta, jak je znázorněno v následujícím kódu.

    // Call to AutoFormat in Visual C# 2010.
    workSheet.Range["A1", "B3"].AutoFormat(Format:
        Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
    
  2. Stiskněte kombinaci kláves CTRL + F5 zobrazíte výsledek.Další formáty jsou uvedeny v XlRangeAutoFormat výčtu.

  3. Příkaz v kroku 1 s následujícím kódem, které jsou uvedeny argumenty, které jsou vyžadovány v porovnání Visual C# 2008 a starších verzích.

    // The AutoFormat method has seven optional value parameters. The 
    // following call specifies a value for the first parameter, and uses  
    // the default values for the other six.  
    
    // Call to AutoFormat in Visual C# 2008. This code is not part of the 
    // current solution.
    excelApp.get_Range("A1", "B4").AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormatTable3, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing);
    

Příklad

Následující kód ukazuje úplný příklad.

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


namespace OfficeProgramminWalkthruComplete
{
    class Walkthrough
    {
        static void Main(string[] args)
        {
            // Create a list of accounts. 
            var bankAccounts = new List<Account> 
            {
                new Account { 
                              ID = 345678,
                              Balance = 541.27
                            },
                new Account {
                              ID = 1230221,
                              Balance = -127.44
                            }
            };

            // Display the list in an Excel spreadsheet.
            DisplayInExcel(bankAccounts);

            // Create a Word document that contains an icon that links to 
            // the spreadsheet.
            CreateIconInWordDoc();
        }

        static void DisplayInExcel(IEnumerable<Account> accounts)
        {
            var excelApp = new Excel.Application();
            // Make the object visible.
            excelApp.Visible = true;

            // Create a new, empty workbook and add it to the collection returned  
            // by property Workbooks. The new workbook becomes the active workbook. 
            // Add has an optional parameter for specifying a praticular template.  
            // Because no argument is sent in this example, Add creates a new workbook. 
            excelApp.Workbooks.Add();

            // This example uses a single workSheet. 
            Excel._Worksheet workSheet = excelApp.ActiveSheet;

            // Earlier versions of C# require explicit casting. 
            //Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet; 

            // Establish column headings in cells A1 and B1.
            workSheet.Cells[1, "A"] = "ID Number";
            workSheet.Cells[1, "B"] = "Current Balance";

            var row = 1;
            foreach (var acct in accounts)
            {
                row++;
                workSheet.Cells[row, "A"] = acct.ID;
                workSheet.Cells[row, "B"] = acct.Balance;
            }

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

            // Call to AutoFormat in Visual C# 2010. This statement replaces the  
            // two calls to AutoFit.
            workSheet.Range["A1", "B3"].AutoFormat(
                Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);

            // Put the spreadsheet contents on the clipboard. The Copy method has one 
            // optional parameter for specifying a destination. Because no argument   
            // is sent, the destination is the Clipboard.
            workSheet.Range["A1:B3"].Copy();
        }

        static void CreateIconInWordDoc()
        {
            var wordApp = new Word.Application();
            wordApp.Visible = true;

            // The Add method has four reference parameters, all of which are  
            // optional. Visual C# 2010 allows you to omit arguments for them if 
            // the default values are what you want.
            wordApp.Documents.Add();

            // PasteSpecial has seven reference parameters, all of which are  
            // optional. This example uses named arguments to specify values  
            // for two of the parameters. Although these are reference  
            // parameters, you do not need to use the ref keyword, or to create  
            // variables to send in as arguments. You can send the values directly.
            wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
        }
    }

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

Viz také

Úkoly

Postupy: Použití pojmenovaných a nepovinných argumentů v programování pro sadu Office (Průvodce programováním v C#)

Referenční dokumentace

dynamic (Referenční dokumentace jazyka C#)

Type.Missing

Koncepty

Pojmenované a nepovinné argumenty (Průvodce programováním v C#)

Další zdroje

Použití typu dynamic (Průvodce programováním v C#)