Postupy: Programování pro Office (C# a Visual Basic)
Visual Studio 2010přináší nové funkce v jazyce C# a Visual Basic, které zlepšují programování Microsoft Office.Každý jazyk byl přidán funkcí, které již existují v jiném jazyce.
Nové funkce v jazyce C# zahrnout pojmenované a volitelné argumenty, návratové hodnoty, které mají typ dynamica v programování, možnost vynechat COM ref klíčové slovo a přístup k indexované vlastnosti.Nové funkce v jazyce Visual Basic patří automaticky implementované vlastnosti příkazy ve lambda výrazy a inicializátory kolekce.
Oba jazyky umožňují vkládání typ informací, které umožňuje nasazení sestavení, které spolupracují s komponentami modelu COM bez nasazení primární sestavení interop (PIA) do počítače uživatele.Další informace naleznete v tématu Názorný postup: Vkládání typy z spravované sestavení (C# a Visual Basic).
Tento návod ukazuje nové funkce v kontextu programování Office, ale mnohé z nich jsou také užitečné obecné programování.V návodu bude nejprve vytvořit sešit aplikace Excel pomocí aplikace Excel doplněk.Vytvoříte dokument aplikace Word, který obsahuje odkaz na sešit.Nakonec uvidíte, jak závislost PIA lze zapínat a vypínat.
Požadavky
Musíte mít aplikaci Microsoft Office Excel 2010 nebo 2007 a Microsoft Office Word 2010 nebo 2007 nainstalován v počítači dokončení tohoto návodu.
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]
Ve vašem počítači se pro některé z prvků uživatelského rozhraní sady Visual Studio mohou zobrazit jiné názvy a umístění, než jsou uvedeny v následujících pokynech. Tyto prvky jsou určeny verzí aplikace Visual Studio a použitým nastavením. Další informace naleznete v tématu Nastavení aplikace Visual Studio.
Nastavení aplikace Excel doplněk
Spusťte aplikaci Visual Studio.
V nabídce File (Soubor) přejděte na příkaz New (Nový) a klepněte na příkaz Project (Projekt).
V Nainstalované šablony podokně rozbalte jazyka Visual Basic nebo Visual C#, rozbalte Officea klepněte na tlačítko 2010 (nebo 2007 Pokud používáte Office 2007).
V šablony podokno, klepněte na doplněk aplikace Excel 2010 (nebo doplněk aplikace Excel 2007).
Oblast v horní části šablony podokně ověřte, zda 4 rozhraní.NET Framework se zobrazí v Cílové rozhraní pole.
Zadejte název projektu název pole, pokud chcete.
Klikněte na tlačítko OK.
Nový projekt se objeví v Průzkumníku.
Přidat odkazy
V Průzkumníku, klepněte pravým tlačítkem na název projektu a potom klepněte na tlačítko Přidat odkaz.Přidat odkaz na se zobrazí dialogové okno.
Na .NET kartě vyberte Microsoft.Office.Interop.Excel, verze 14.0.0.0 (nebo 12.0.0.0 verze aplikace Excel 2007) v Název součásti seznam a podržte klávesu CTRL klíč a vybrat Microsoft.Office.Interop.Word, verze 14.0.0.0 (nebo 12.0.0.0 pro aplikaci Word 2007).
Klikněte na tlačítko OK.
Přidat potřebné příkazy dovozu nebo použití směrnic
V Průzkumníku, klepněte pravým tlačítkem myši ThisAddIn.vb nebo ThisAddIn.cs soubor a klepněte na tlačítko Zobrazení kódu.
Přidejte následující Imports příkazy (Visual Basic) nebo using směrnic (C#) na začátek souboru kódu, pokud již nejsou přítomny.
Imports Microsoft.Office.Interop
using System.Collections.Generic; using Excel = Microsoft.Office.Interop.Excel; using Word = Microsoft.Office.Interop.Word;
Vytvořit seznam bankovních účtů
V Průzkumníku, klepněte pravým tlačítkem na název projektu, klepněte na Přidata klepněte na tlačítko třídy.Pokud používáte Visual Basic nebo Account.cs Pokud používáte jazyk C#, název třídy Account.vb.Klikněte na tlačítko Přidat.
Nahraďte definici Account třídy s následujícím kódem.Definice tříd pomocí automaticky implementované vlastnosti, nové Visual Basic v aplikaci Visual Studio 2010.Další informace naleznete v tématu Vlastnosti automatické implementována (Visual Basic).
Public Class Account Property ID As Integer = -1 Property Balance As Double End Class
class Account { public int ID { get; set; } public double Balance { get; set; } }
Vytvořit bankAccounts seznam, který obsahuje dva účty přidejte následující kód ThisAddIn_Startup metodu ThisAddIn.vb nebo ThisAddIn.cs.Pomocí seznamu prohlášení inicializátory kolekce, nové Visual Basic v aplikaci Visual Studio 2010.Další informace naleznete v tématu Inicializátory kolekce (Visual Basic).
Dim bankAccounts As New List(Of Account) From { New Account With { .ID = 345, .Balance = 541.27 }, New Account With { .ID = 123, .Balance = -127.44 } }
var bankAccounts = new List<Account> { new Account { ID = 345, Balance = 541.27 }, new Account { ID = 123, Balance = -127.44 } };
Export dat do aplikace Excel
Ve stejném souboru přidejte následující metodu ThisAddIn třídy.Metoda nastaví sešit aplikace Excel a exportuje data do něj.
Sub DisplayInExcel(ByVal accounts As IEnumerable(Of Account), ByVal DisplayAction As Action(Of Account, Excel.Range)) With Me.Application ' Add a new Excel workbook. .Workbooks.Add() .Visible = True .Range("A1").Value = "ID" .Range("B1").Value = "Balance" .Range("A2").Select() For Each ac In accounts DisplayAction(ac, .ActiveCell) .ActiveCell.Offset(1, 0).Select() Next ' Copy the results to the Clipboard. .Range("A1:B3").Copy() End With End Sub
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(); }
Tato metoda se používají dvě nové C# funkce.Obě tyto funkce již existují v jazyce Visual Basic.
Metoda Přidat má volitelný parametr pro určení konkrétní šablony.Volitelné parametry, které jsou nové v Visual C# 2010, umožňují vynecháte argument pro parametr, chcete-li použít výchozí hodnotu parametru.Protože v předchozím příkladu je odeslán žádný argument Add používá výchozí šablonou a vytvoří nový sešit.Zástupný argument vyžaduje ekvivalent příkazu v dřívějších verzích jazyka C#: excelApp.Workbooks.Add(Type.Missing).
Další informace naleznete v tématu Pojmenované a volitelné argumenty (Příručka programování C#).
Range a Offset vlastnosti oblast použití objektu Indexované vlastnosti funkce.Tato funkce umožňuje využívat tyto vlastnosti z typů modelu COM pomocí následující typické C# syntaxe.Indexované vlastnosti lze také použít Value vlastnost Range objekt odstraní nutnost použít Value2 vlastnost.Value Indexované vlastnosti, ale index je volitelné.Volitelné argumenty a indexované vlastnosti společně 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();
V dřívějších verzích jazyka je nutné speciální syntaxe.
// In Visual C# 2008, you cannot access the Range, Offset, and Value // properties directly. excelApp.get_Range("A1").Value2 = "ID"; excelApp.ActiveCell.get_Offset(1, 0).Select();
Indexované vlastnosti nelze vytvořit.Tuto funkci podporuje pouze spotřeba stávající indexované vlastnosti.
Další informace naleznete v tématu Jak: Použití indexovaných vlastností v modelu COM Interop programování (Příručka programování C#).
Přidejte následující kód na konci DisplayInExcel upravit šířku sloupce tak, aby odpovídala obsahu.
' Add the following two lines at the end of the With statement. .Columns(1).AutoFit() .Columns(2).AutoFit()
excelApp.Columns[1].AutoFit(); excelApp.Columns[2].AutoFit();
Tyto dodatky ukazují další nová funkce v jazyce C# 2010: léčení Object hodnoty vrácené z hostitelů COM jako Office, pokud typ dynamické.Dojde automaticky při Embed Interop Types je nastavena na výchozí hodnotu, True, nebo ekvivalentně, při sestavení odkazuje /Link možnost kompilátoru.Typ dynamic umožňuje pozdní vazby, již k dispozici v jazyce Visual Basic a zamezí explicitní přetypování v Visual C# 2008 a předchozích verzích jazyka.
Například excelApp.Columns[1] vrátí Object, a AutoFit aplikace Excel je oblast metoda.Bez dynamic, musíte přetypovat objekt vrácený funkcí excelApp.Columns[1] jako instance Range před voláním metody AutoFit.
// Casting is required in Visual C# 2008. ((Excel.Range)excelApp.Columns[1]).AutoFit(); // Casting is not required in Visual C# 2010. excelApp.Columns[1].AutoFit();
Další informace o vkládání interoperabilní typy viz postupy "najít odkaz PIA" a "obnovit závislost PIA" dále v tomto tématu.Další informace o dynamic, viz dynamické (C#-Reference) nebo Pomocí dynamického typu (C# program televize).
K vyvolání DisplayInExcel
Přidejte následující kód na konci ThisAddIn_StartUp metoda.Volání DisplayInExcel obsahuje dva argumenty.První argument je název seznamu účtů, které mají být zpracovány.Druhý argument je víceřádkové lambda výraz, který definuje, jak se data zpracovat.ID a balance jsou zobrazeny hodnoty pro každý účet v sousedních buněk a řádek je zobrazen červeně, pokud je zůstatek je menší než nula.Víceřádkové lambda výrazy jsou novou funkcí aplikace Visual Basic 2010.Další informace naleznete v tématu Lambda výrazy (Visual Basic).
DisplayInExcel(bankAccounts, Sub(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 Then cell.Interior.Color = RGB(255, 0, 0) cell.Offset(0, 1).Interior.Color = RGB(255, 0, 0) End If End Sub)
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; } });
Chcete-li spustit program, stiskněte klávesu F5.Zobrazí list aplikace Excel obsahující data z účtů.
Chcete-li přidat dokument aplikace Word
Přidejte následující kód na konci ThisAddIn_StartUp metoda vytvořit dokument aplikace Word, který obsahuje odkaz na sešit aplikace Excel.
Dim wordApp As New Word.Application wordApp.Visible = True wordApp.Documents.Add() wordApp.Selection.PasteSpecial(Link:=True, DisplayAsIcon:=True)
var wordApp = new Word.Application(); wordApp.Visible = true; wordApp.Documents.Add(); wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Tento kód ukazuje několik nových funkcí v jazyce C#: možnost vynechat ref klíčové slovo v programování v modelu COM, pojmenované argumenty a volitelné argumenty.Tyto funkce již existují v jazyce Visual Basic.PasteSpecial metoda má sedm parametry, které jsou definovány jako odkaz volitelné parametry.Před Visual C# 2010 bylo definovat proměnné objektu použít jako argumenty pro sedm parametry, i když měl odesílat žádné platné hodnoty.Pojmenované a volitelné argumenty umožňují určit název a argumenty odeslat pouze ty parametry požadované parametry.V tomto příkladu jsou odesílány argumenty k označení, že by měl být vytvořen odkaz na sešit do schránky (parametr Link), a odkaz je zobrazen jako ikona dokumentu aplikace Word (parametr DisplayAsIcon).Visual C# 2010 také umožňuje vynechat ref klíčové slovo pro tyto argumenty.Následující kód segmentu z Visual C# 2008 porovnejte s jeden řádek v aplikaci Visual C# 2010:
// Call to PasteSpecial in Visual C# 2008. object iconIndex = Type.Missing; object link = true; object placement = Type.Missing; object displayAsIcon = true; object dataType = Type.Missing; object iconFileName = Type.Missing; object iconLabel = Type.Missing; wordApp.Selection.PasteSpecial(ref iconIndex, ref link, ref placement, ref displayAsIcon, ref dataType, ref iconFileName, ref iconLabel); // Call to PasteSpecial in Visual C# 2010. wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Spuštění aplikace
- Stisknutím klávesy F5 spustíte aplikaci.Aplikace Excel spustí a zobrazí tabulku obsahující informace z obou účtů v bankAccounts.Potom zobrazí dokument aplikace Word obsahující odkaz na tabulku aplikace Excel.
Vyčistit dokončeného projektu
- V aplikaci Visual Studio klepněte na Čisté řešení na sestavení nabídky.Jinak doplněk bude spuštěna při každém otevření aplikace Excel v počítači.
Odkaz PIA
Spusťte aplikaci znovu, ale na tlačítko Čisté řešení.
Na Start nabídky, klepněte na Všechny programy.Klepnutím na tlačítko Microsoft Visual Studio 2010, pak Nástroje Visual Studio, pak Příkazový řádek Visual Studio (2010).
Typ ildasm v příkazu Visual Studio (2010) okna příkazového řádku a stiskněte klávesu ENTER.Zobrazí se okně IL DASM.
Na soubor klepněte v nabídce v okně IL DASM Open.Poklepejte na Visual Studio 2010a potom poklepejte na projekty.Otevřete složku projektu a vyhledejte ve složce bin/Debug název projektuDLL.Poklepejte na název projektuDLL.Nové okno zobrazí atributy do projektu, kromě odkazů na jiné moduly a sestavení.Všimněte si, že obory názvů Microsoft.Office.Interop.Excel a Microsoft.Office.Interop.Word jsou zahrnuty v sestavení.Ve výchozím nastavení Visual Studio 2010 kompilátor importuje typy, které potřebujete z odkazované PIA do vašeho sestavení.
Další informace naleznete v tématu Jak: zobrazení obsahu sestavení.
Poklepejte MANIFEST ikonu.Zobrazí se okno obsahující seznam sestavení, které obsahují položky, které odkazuje na projekt.Microsoft.Office.Interop.Excela Microsoft.Office.Interop.Word nejsou zahrnuty v seznamu.Typy projektu potřebuje byly importovány do sestavení, moduly PIA odkazy nejsou nutné.Usnadňuje nasazení.PIA nemají být přítomny v počítači uživatele a protože aplikace nevyžaduje zavedení konkrétní verzi instrukci PIA, může aplikace navržen pro práci s více verzí sady Office, za předpokladu, že nezbytné API existují ve všech verzích.
Protože nasazení PIA již není nutné, můžete vytvořit aplikaci pokročilých scénářů, které pracuje s více verzí sady Office, včetně starších verzí.Však funguje pouze v případě, že váš kód nepoužívá žádné rozhraní API, která nejsou k dispozici ve verzi Office pracujete.Není vždy zřejmé zda konkrétní rozhraní API byla k dispozici v dřívější verzi a že se nedoporučuje z důvodu práce s dřívější verzí sady Office.
[!POZNÁMKA]
Office nezveřejňují PIA před Office 2003.Jediný způsob, jak generovat sestavení interop pro Office 2002 nebo starší verze, tedy importováním odkaz COM.
Zavřete okno manifestu a okno sestavení.
Obnovení PIA závislost
V Průzkumníku, klepněte Zobrazit všechny soubory tlačítko.Rozbalte odkazy složku a vyberte Microsoft.Office.Interop.Excel.Stisknutím klávesy F4 zobrazte Vlastnosti okna.
V Vlastnostis okna změnit Embed Interop Types vlastnost z True na False.
Opakujte kroky 1 a 2 tohoto postupu pro Microsoft.Office.Interop.Word.
V jazyce C# poznámky, dvě volání Autofit na konci DisplayInExcel metoda.
Stisknutím klávesy F5 ověřte, že projekt stále běží správně.
Opakujte kroky 1 až 3 z předchozího postupu otevřete okno sestavení.Všimněte si, že Microsoft.Office.Interop.Word a Microsoft.Office.Interop.Excel jsou již v seznamu vložené sestavení.
Poklepejte MANIFEST ikonu a procházet seznam odkazované sestavení.I Microsoft.Office.Interop.Word a Microsoft.Office.Interop.Excel v seznamu.Protože odkazy aplikace Excel a Word PIA a Embed Interop Types vlastnost False, musí existovat obě sestavení v počítači koncového uživatele.
V aplikaci Visual Studio klepněte na Čisté řešení na sestavení nabídce vyčistit dokončeného projektu.
Viz také
Úkoly
Jak: Použití indexovaných vlastností v modelu COM Interop programování (Příručka programování C#)
Názorný postup: Vkládání typ informace ze sady Microsoft Office sestavení (C# a Visual Basic)
Názorný postup: Vkládání typy z spravované sestavení (C# a Visual Basic)
Názorný postup: Vytvoření první úroveň aplikace doplněk aplikace Excel
Referenční dokumentace
Vlastnosti automatické implementována (Příručka programování C#)
Objekt a kolekce Inicializátory (Příručka programování C#)
Lambda výrazy (Příručka programování C#)
Interoperability (Příručka programování C#)
Koncepty
Vlastnosti automatické implementována (Visual Basic)
Inicializátory kolekce (Visual Basic)
Volitelné parametry (Visual Basic)
Předávání argumentů podle umístění a název (Visual Basic)
Pojmenované a volitelné argumenty (Příručka programování C#)
Včasná a zpožděná vazba (Visual Basic)