Az Office interop objektumainak elérése
A C# olyan funkciókkal rendelkezik, amelyek leegyszerűsítik az Office API-objektumokhoz való hozzáférést. Az új funkciók közé tartoznak a névvel ellátott és választható argumentumok, egy új, úgynevezett dynamic
típus, valamint az a képesség, hogy az argumentumokat a COM-metódusok paramétereire hivatkozva úgy adják át, mintha értékparaméterek lennének.
Ebben a cikkben az új funkciókkal olyan kódot írhat, amely létrehoz és megjelenít egy Microsoft Office Excel-munkalapot. Az Excel-munkalaphoz csatolt ikont tartalmazó Office Word-dokumentum hozzáadásához kódot kell írnia.
Az útmutató elvégzéséhez telepítve kell lennie a számítógépre a Microsoft Office Excel 2007 és a Microsoft Office Word 2007 vagy újabb verzióival.
Feljegyzés
Előfordulhat, hogy a számítógép különböző neveket vagy helyeket jelenít meg a Visual Studio felhasználói felületének egyes elemeihez az alábbi utasításokban. Ezeket az elemeket a Visual Studio-kiadás és a használt beállítások határozzák meg. További információ: Az IDE személyre szabása.
Fontos
A VSTO (Visual Studio Tools for Office) a .NET-keretrendszer támaszkodik. A COM-bővítmények a .NET-keretrendszer is írhatók. Az Office-bővítmények nem hozhatók létre a .NET Core és a .NET 5+ legújabb verzióival. Ennek az az oka, hogy a .NET Core/.NET 5+ nem tud együttműködni a .NET-keretrendszer ugyanabban a folyamatban, és bővítménybetöltési hibákhoz vezethet. Továbbra is használhatja a .NET-keretrendszer az Office VSTO- és COM-bővítményeinek írásához. A Microsoft nem frissíti a VSTO-t vagy a COM bővítményplatformot a .NET Core vagy a .NET 5+ használatára. Az Office Web-bővítmények kiszolgálóoldalának létrehozásához a .NET Core és a .NET 5+ (beleértve a ASP.NET Core-t) is használhatja.
Új konzolalkalmazás létrehozása
- Indítsa el a Visual Studiót.
- A Fájl menüben mutasson az Új pontra, majd válassza a Project lehetőséget. Megjelenik a New project (Új projekt) párbeszédpanel.
- A Telepített sablonok panelen bontsa ki a C# elemet, majd válassza a Windows lehetőséget.
- Az Új projekt párbeszédpanel tetején győződjön meg arról, hogy a .NET-keretrendszer 4-es (vagy újabb) verziót választja célkeretként.
- A Sablonok panelen válassza a Konzolalkalmazás lehetőséget.
- Írja be a projekt nevét a Név mezőbe.
- Kattintson az OK gombra.
Az új projekt megjelenik Megoldáskezelő.
Hivatkozások hozzáadása
- A Megoldáskezelő kattintson a jobb gombbal a projekt nevére, majd válassza a Hivatkozás hozzáadása lehetőséget. Megjelenik a Hivatkozás hozzáadása párbeszédpanel.
- A Szerelvények lapon válassza a Microsoft.Office.Interop.Word elemet az Összetevő neve listában, majd tartsa lenyomva a CTRL billentyűt, és válassza a Microsoft.Office.Interop.Excel lehetőséget. Ha nem látja a szerelvényeket, előfordulhat, hogy telepítenie kell őket. Lásd : Az Office elsődleges interop-szerelvények telepítése.
- Kattintson az OK gombra.
A szükséges irányelvek hozzáadása
A Megoldáskezelő kattintson a jobb gombbal a Program.cs fájlra, majd válassza a Kód megtekintése parancsot. Adja hozzá a következő using
irányelveket a kódfájl elejéhez:
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
Bankszámlalista létrehozása
Illessze be a következő osztálydefiníciót a Program.cs az Program
osztály alá.
public class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
Adja hozzá a következő kódot a Main
metódushoz egy bankAccounts
két fiókot tartalmazó lista létrehozásához.
// Create a list of accounts.
var bankAccounts = new List<Account> {
new Account {
ID = 345678,
Balance = 541.27
},
new Account {
ID = 1230221,
Balance = -127.44
}
};
Fiókadatokat excelbe exportáló metódus deklarálása
- Excel-munkalap beállításához adja hozzá az alábbi metódust az
Program
osztályhoz. A metódus Add opcionális paraméterrel rendelkezik egy adott sablon megadásához. Az opcionális paraméterek lehetővé teszik, hogy kihagyja a paraméter argumentumát, ha a paraméter alapértelmezett értékét szeretné használni. Mivel nem adott meg argumentumot, az alapértelmezett sablont használja,Add
és létrehoz egy új munkafüzetet. A C# korábbi verzióiban a megfelelő utasításhoz helyőrző argumentum szükséges: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 particular 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;
}
Adja hozzá a következő kódot a fájl végén DisplayInExcel
. A kód a munkalap első sorának első két oszlopába szúr be értékeket.
// Establish column headings in cells A1 and B1.
workSheet.Cells[1, "A"] = "ID Number";
workSheet.Cells[1, "B"] = "Current Balance";
Adja hozzá a következő kódot a fájl végén DisplayInExcel
. A foreach
hurok a fiókok listájából származó információkat a munkalap egymást követő sorainak első két oszlopába helyezi.
var row = 1;
foreach (var acct in accounts)
{
row++;
workSheet.Cells[row, "A"] = acct.ID;
workSheet.Cells[row, "B"] = acct.Balance;
}
Adja hozzá a következő kódot az oszlop szélességének DisplayInExcel
a tartalomhoz való igazításához.
workSheet.Columns[1].AutoFit();
workSheet.Columns[2].AutoFit();
A C# korábbi verziói explicit öntést igényelnek ezekhez a műveletekhez, mert ExcelApp.Columns[1]
egy , és AutoFit
egy Excel-metódust RangeObject
ad vissza. Az alábbi sorok az öntést mutatják.
((Excel.Range)workSheet.Columns[1]).AutoFit();
((Excel.Range)workSheet.Columns[2]).AutoFit();
A C# automatikusan átalakítja a visszaadott Object
dynamic
értéket, ha a szerelvényre az EmbedInteropTypes fordítóprogram hivatkozik, vagy ezzel egyenértékű, ha az Excel Beágyazás interoptípusok tulajdonsága igaz. Ennek a tulajdonságnak az alapértelmezett értéke az igaz.
A projekt futtatása
Adja hozzá a következő sort a végéhez Main
.
// Display the list in an Excel spreadsheet.
DisplayInExcel(bankAccounts);
Nyomja le a CTRL+F5 billentyűkombinációt. Megjelenik egy Excel-munkalap, amely a két fiók adatait tartalmazza.
Word-dokumentum hozzáadása
Az alábbi kód megnyit egy Word-alkalmazást, és létrehoz egy ikont, amely az Excel-munkalapra mutat. Illessze be az osztályba a lépés későbbi részében megadott beillesztési Program
módszertCreateIconInWordDoc
. CreateIconInWordDoc
névvel ellátott és nem kötelező argumentumokat használ a metódushívások összetettségének csökkentésére AddPasteSpecial. Ezek a hívások két további funkciót tartalmaznak, amelyek leegyszerűsítik a referenciaparaméterekkel rendelkező COM-metódusok hívásait. Először úgy küldhet argumentumokat a referenciaparamétereknek, mintha értékparaméterek lennének. Ez azt is jelentheti, hogy közvetlenül küldhet értékeket anélkül, hogy minden referenciaparaméterhez létrehoznál egy változót. A fordító ideiglenes változókat hoz létre az argumentumértékek tárolásához, és a hívásból való visszatéréskor elveti a változókat. Másodszor kihagyhatja a kulcsszót ref
az argumentumlistában.
A Add
metódus négy referenciaparamétert használ, amelyek mindegyike nem kötelező. Ha az alapértelmezett értékeket szeretné használni, kihagyhatja bármelyik vagy az összes paraméter argumentumait.
A PasteSpecial
metódus beszúrja a vágólap tartalmát. A metódus hét referenciaparamétert használ, amelyek mindegyike nem kötelező. A következő kód két argumentumot határoz meg: Link
a vágólap tartalmának forrására mutató hivatkozás létrehozásához és DisplayAsIcon
a hivatkozás ikonként való megjelenítéséhez. A két argumentum nevesített argumentumait használhatja, és kihagyhatja a többit. Bár ezek az argumentumok referenciaparaméterek, nem kell a ref
kulcsszót használnia, és nem kell változókat létrehoznia az argumentumként való küldéshez. Az értékeket közvetlenül is elküldheti.
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# 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);
}
Adja hozzá a következő utasítást Main
a következő sor végén.
// Create a Word document that contains an icon that links to
// the spreadsheet.
CreateIconInWordDoc();
Adja hozzá a következő utasítást DisplayInExcel
a következő sor végén. A Copy
metódus hozzáadja a munkalapot a vágólaphoz.
// 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();
Nyomja le a CTRL+F5 billentyűkombinációt. Megjelenik egy ikont tartalmazó Word-dokumentum. Kattintson duplán az ikonra a munkalap előtérbe helyezéséhez.
A Beágyazás interop Types tulajdonság beállítása
További fejlesztések akkor lehetségesek, ha olyan COM-típust hív meg, amely nem igényel elsődleges interop szerelvényt (PIA) futásidőben. A PIA-któl való függőség megszüntetése verziófüggést és egyszerűbb üzembe helyezést eredményez. A PIA-k nélküli programozás előnyeiről további információt a következő útmutatóban talál : Típusok beágyazása felügyelt szerelvényekből.
Emellett a programozás egyszerűbb, mert a dynamic
típus a COM-metódusokban deklarált kötelező és visszaadott típusokat jelöli. A típussal dynamic
rendelkező változókat a rendszer csak futási idő alatt értékeli ki, ami szükségtelenné teszi az explicit öntést. További információt a Dinamikus típus használata című témakörben talál.
A típusinformációk beágyazása a PIA-k használata helyett az alapértelmezett viselkedés. Az alapértelmezett beállítás miatt az előző példák közül több is egyszerűbb. Nincs szükség explicit öntésre. A beírási DisplayInExcel
deklaráció worksheet
például nem a beírást, hanem Excel._Worksheet workSheet = excelApp.ActiveSheet
Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet
a beírást írja. Az ugyanabban a metódusban indított AutoFit
hívásokhoz az alapértelmezett érték nélküli explicit öntésre is szükség lenne, mivel ExcelApp.Columns[1]
egy Object
, és AutoFit
egy Excel-metódust ad vissza. Az alábbi kód az öntvényt mutatja.
((Excel.Range)workSheet.Columns[1]).AutoFit();
((Excel.Range)workSheet.Columns[2]).AutoFit();
Ha módosítani szeretné az alapértelmezett beállítást, és nem beágyazási típusadatokat szeretne használni, bontsa ki a Hivatkozások csomópontot a Megoldáskezelő, majd válassza a Microsoft.Office.Interop.Excel vagy a Microsoft.Office.Interop.Word lehetőséget. Ha nem látja a Tulajdonságok ablakot, nyomja le az F4 billentyűt. Keresse meg a beágyazási interoptípusokat a tulajdonságok listájában, és módosítsa az értékét Hamis értékre. Ezzel egyenértékű, ha a Hivatkozások fordítót használja az EmbedInteropTypes parancs helyett egy parancssorban.
További formázás hozzáadása a táblához
Cserélje le a két behívott AutoFit
DisplayInExcel
hívást a következő utasításra.
// Call to AutoFormat in Visual C# 2010.
workSheet.Range["A1", "B3"].AutoFormat(
Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
A AutoFormat metódus hét értékparamétert használ, amelyek mindegyike nem kötelező. Az elnevezett és választható argumentumok lehetővé teszik, hogy argumentumokat adjon meg egyikhez sem, néhányhoz vagy mindegyikhez. Az előző utasításban csak az egyik paraméter argumentumát adja meg. Format
Mivel Format
a paraméterlista első paramétere, nem kell megadnia a paraméter nevét. Az utasítás azonban könnyebben érthető, ha a paraméter nevét adja meg, ahogy az az alábbi kódban is látható.
// Call to AutoFormat in Visual C# 2010.
workSheet.Range["A1", "B3"].AutoFormat(Format:
Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
Az eredmény megtekintéséhez nyomja le a CTRL+F5 billentyűkombinációt. Az enumerálásban felsorolt egyéb formátumokat is megtalálhatja XlRangeAutoFormat .
Példa
Az alábbi kód a teljes példát mutatja be.
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
namespace OfficeProgrammingWalkthruComplete
{
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 particular 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#. 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# 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; }
}
}
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: