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
Spuštění sady Visual Studio.
Na soubor nabídce přejděte na novýa potom klikněte na tlačítko projektu.Zobrazí se dialogové okno Nový projekt.
V nainstalované šablony podokně rozbalte **Visual C#**a potom klikněte na tlačítko Windows.
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í.
V šablony podokně klikněte na tlačítko aplikace konzoly.
Zadejte název pro váš projekt v název pole.
Klikněte na tlačítko OK.
Nový projekt se zobrazí v Průzkumníka řešení.
Chcete-li přidat odkazy
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.
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)
Klikněte na tlačítko OK.
Chcete-li přidat nezbytné pomocí direktivy
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.
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
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; } }
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
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; }
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";
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; }
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
Přidejte následující řádek na konci Main.
// Display the list in an Excel spreadsheet. DisplayInExcel(bankAccounts);
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
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); }
Přidejte následující výraz na konci Main.
// Create a Word document that contains an icon that links to // the spreadsheet. CreateIconInWordDoc();
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();
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
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();
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.
Pokud se nezobrazují vlastnosti okna, stiskněte klávesu F4.
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
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);
Stiskněte kombinaci kláves CTRL + F5 zobrazíte výsledek.Další formáty jsou uvedeny v XlRangeAutoFormat výčtu.
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
Referenční dokumentace
dynamic (Referenční dokumentace jazyka C#)
Koncepty
Pojmenované a nepovinné argumenty (Průvodce programováním v C#)