Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
C# erbjuder funktioner som förbättrar Microsoft Office-programmering. Användbara C#-funktioner inkluderar namngivna och valfria argument och returvärden av typen dynamic. I COM-programmering kan du utelämna nyckelordet ref och få åtkomst till indexerade egenskaper.
Båda språken möjliggör inbäddning av typinformation, vilket möjliggör distribution av sammansättningar som interagerar med COM-komponenter utan att distribuera primära interop-sammansättningar (PIA) till användarens dator. Mer information finns i Genomgång: Bädda in typer från hanterade sammansättningar.
Den här genomgången visar dessa funktioner i samband med Office-programmering, men många av dessa funktioner är också användbara i allmän programmering. I genomgången använder du ett Excel-tilläggsprogram för att skapa en Excel-arbetsbok. Sedan skapar du ett Word-dokument som innehåller en länk till arbetsboken. Slutligen ser du hur du aktiverar och inaktiverar PIA-beroendet.
Viktigt!
VSTO (Visual Studio Tools för Office) förlitar sig på .NET Framework. COM-tillägg kan också skrivas med .NET Framework. Office-tillägg kan inte skapas med .NET Core och .NET 5+, de senaste versionerna av .NET. Det beror på att .NET Core/.NET 5+ inte kan fungera tillsammans med .NET Framework i samma process och kan leda till tilläggsbelastningsfel. Du kan fortsätta att använda .NET Framework för att skriva VSTO- och COM-tillägg för Office. Microsoft uppdaterar inte VSTO eller COM-tilläggsplattformen för att använda .NET Core eller .NET 5+. Du kan dra nytta av .NET Core och .NET 5+, inklusive ASP.NET Core, för att skapa serversidan för Office Web Add-ins.
Förutsättningar
Du måste ha Microsoft Office Excel och Microsoft Office Word installerat på datorn för att slutföra den här genomgången.
Kommentar
Datorn kan visa olika namn eller platser för vissa av Visual Studio-användargränssnittselementen i följande instruktioner. Den Visual Studio-utgåva som du har och de inställningar som du använder avgör dessa element. Mer information finns i Anpassa IDE.
Konfigurera ett Excel-tilläggsprogram
- Starta Visual Studio.
- På Arkiv-menyn pekar du på Nytt och väljer sedan Projekt.
- I fönstret Installerade mallar expanderar du C#, expanderar Office och väljer sedan versionsåret för Office-produkten.
- I fönstret Mallar väljer du Tillägg för Excel-version<>.
- Titta överst i fönstret Mallar för att se till att .NET Framework 4, eller en senare version, visas i rutan Målramverk .
- Ange ett namn för projektet i rutan Namn om du vill.
- Välj OK.
- Det nya projektet visas i Solution Explorer.
Lägga till referenser
- Högerklicka på projektets namn i Solution Explorer och välj sedan Lägg till referens. Dialogrutan Lägg till referens visas.
- På fliken Sammansättningar väljer du Microsoft.Office.Interop.Excel, version
<version>.0.0.0(för en nyckel till versionsnumren för Office-produkten, se Microsoft-versioner), i listan Komponentnamn och håller sedan ned CTRL-tangenten och väljer Microsoft.Office.Interop.Word,version <version>.0.0.0. Om du inte ser sammansättningarna kan du behöva installera dem (se Så här: Installera Office Primary Interop-sammansättningar). - Välj OK.
Lägga till nödvändiga importinstruktioner eller använda direktiv
Högerklicka på filen ThisAddIn.cs i Solution Explorer och välj sedan Visa kod. Lägg till följande using direktiv (C#) överst i kodfilen om de inte redan finns.
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
Skapa en lista över bankkonton
Högerklicka på projektets namn i Solution Explorer, välj Lägg till och välj sedan Klass. Ge klassen namnet Account.cs. Markera Lägga till. Ersätt definitionen av Account klassen med följande kod. Klassdefinitionerna använder automatiskt implementerade egenskaper.
class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
Om du vill skapa en bankAccounts lista som innehåller två konton lägger du till ThisAddIn_Startup följande kod i metoden i ThisAddIn.cs. Listdeklarationerna använder insamlingsinitierare.
var bankAccounts = new List<Account>
{
new Account
{
ID = 345,
Balance = 541.27
},
new Account
{
ID = 123,
Balance = -127.44
}
};
Exportera data till Excel
Lägg till följande metod i ThisAddIn klassen i samma fil. Metoden konfigurerar en Excel-arbetsbok och exporterar data till den.
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();
}
- Metodtillägg har en valfri parameter för att ange en viss mall. Med valfria parametrar kan du utelämna argumentet för parametern om du vill använda parameterns standardvärde. Eftersom föregående exempel inte har några argument
Addanvänder du standardmallen och skapar en ny arbetsbok. Motsvarande instruktion i tidigare versioner av C# kräver ett platshållarargument:excelApp.Workbooks.Add(Type.Missing). Mer information finns i Namngivna och valfria argument. - Egenskaperna
RangeochOffsetför range-objektet använder funktionen indexerade egenskaper . Med den här funktionen kan du använda dessa egenskaper från COM-typer med hjälp av följande typiskA C#-syntax. Med indexerade egenskaper kan du också användaValue-egenskapen förRangeobjektet, vilket eliminerar behovet av att användaValue2egenskapen. EgenskapenValueär indexerad, men indexet är valfritt. Valfria argument och indexerade egenskaper fungerar tillsammans i följande exempel.
// Visual C# 2010 provides indexed properties for COM programming.
excelApp.Range["A1"].Value = "ID";
excelApp.ActiveCell.Offset[1, 0].Select();
Du kan inte skapa egna indexerade egenskaper. Funktionen stöder endast förbrukning av befintliga indexerade egenskaper.
Lägg till följande kod i slutet av DisplayInExcel för att justera kolumnbredderna så att de passar innehållet.
excelApp.Columns[1].AutoFit();
excelApp.Columns[2].AutoFit();
Dessa tillägg visar en annan funktion i C#: behandla Object värden som returneras från COM-värdar, till exempel Office som om de har typdynamik. COM-objekt behandlas som dynamic automatiskt när Embed Interop Types har sitt standardvärde, True, eller, motsvarande, när du refererar till sammansättningen med kompilatoralternativet EmbedInteropTypes . Mer information om inbäddning av interop-typer finns i procedurerna "För att hitta PIA-referensen" och "Återställa PIA-beroendet" senare i den här artikeln. Mer information om dynamicfinns i Dynamisk eller Använda typ dynamisk.
Anropa DisplayInExcel
Lägg till följande kod i slutet av ThisAddIn_StartUp metoden. Anropet till DisplayInExcel innehåller två argument. Det första argumentet är namnet på listan över konton som bearbetas. Det andra argumentet är ett lambda-uttryck med flera linjer som definierar hur data ska bearbetas. Värdena ID och balance för varje konto visas i intilliggande celler och raden visas i rött om saldot är mindre än noll. Mer information finns i Lambda-uttryck.
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;
}
});
Tryck på F5 för att köra programmet. Ett Excel-kalkylblad visas som innehåller data från kontona.
Lägga till ett Word-dokument
Lägg till följande kod i slutet av ThisAddIn_StartUp metoden för att skapa ett Word-dokument som innehåller en länk till Excel-arbetsboken.
var wordApp = new Word.Application();
wordApp.Visible = true;
wordApp.Documents.Add();
wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Den här koden visar flera av funktionerna i C#: möjligheten att utelämna nyckelordet ref i COM-programmering, namngivna argument och valfria argument. Metoden PasteSpecial har sju parametrar, som alla är valfria referensparametrar. Med namngivna och valfria argument kan du ange de parametrar som du vill komma åt med namn och skicka argument till endast dessa parametrar. I det här exemplet anger argument att du skapar en länk till arbetsboken i Urklipp (parametern Link) och att länken i Word-dokumentet visas som en ikon (parameter DisplayAsIcon). Med C# kan du också utelämna nyckelordet ref för dessa argument.
Köra programmet
Tryck på F5 för att köra appen. Excel startar och visar en tabell som innehåller informationen från de två kontona i bankAccounts. Sedan visas ett Word-dokument som innehåller en länk till Excel-tabellen.
Rensa det slutförda projektet
I Visual Studio väljer du Rensa lösning på menyn Skapa . Annars körs tillägget varje gång du öppnar Excel på datorn.
Hitta PIA-referensen
- Kör programmet igen, men välj inte Rensa lösning.
- Välj Start. Leta upp Microsoft Visual Studio-versionen <> och öppna en kommandotolk för utvecklare.
- Skriv
ildasmi fönstret Developer Command Prompt for Visual Studio (Kommandotolk för utvecklare för Visual Studio) och tryck sedan på RETUR. IL DASM-fönstret visas. - På menyn Arkiv i IL DASM-fönstret väljer du Öppna fil>. Dubbelklicka på Visual Studio-versionen <>och dubbelklicka sedan på Projekt. Öppna mappen för projektet och leta efter projektnamnet.dll i mappen bin/Debug. Dubbelklicka på projektnamnet.dll. Ett nytt fönster visar projektets attribut, förutom referenser till andra moduler och sammansättningar. Sammansättningen innehåller namnrymderna
Microsoft.Office.Interop.ExcelochMicrosoft.Office.Interop.Word. Som standard i Visual Studio importerar kompilatorn de typer du behöver från en refererad PIA till din sammansättning. Mer information finns i Så här: Visa sammansättningsinnehåll. - Dubbelklicka på manifestikonen. Ett fönster visas som innehåller en lista över sammansättningar som innehåller objekt som refereras av projektet.
Microsoft.Office.Interop.ExcelochMicrosoft.Office.Interop.Wordfinns inte med i listan. Eftersom du har importerat de typer som projektet behöver till din sammansättning behöver du inte installera referenser till en PIA. Om du importerar typerna till sammansättningen blir distributionen enklare. PIA:erna behöver inte finnas på användarens dator. Ett program kräver inte distribution av en specifik version av en PIA. Program kan fungera med flera versioner av Office, förutsatt att nödvändiga API:er finns i alla versioner. Eftersom distribution av PIA inte längre behövs kan du skapa ett program i avancerade scenarier som fungerar med flera versioner av Office, inklusive tidigare versioner. Koden kan inte använda några API:er som inte är tillgängliga i den version av Office som du arbetar med. Det är inte alltid klart om ett visst API var tillgängligt i en tidigare version. Vi rekommenderar inte att du arbetar med tidigare versioner av Office. - Stäng manifestfönstret och sammansättningsfönstret.
Återställa PIA-beroendet
- I Solution Explorer väljer du knappen Visa alla filer . Expandera mappen Referenser och välj Microsoft.Office.Interop.Excel. Tryck på F4 för att visa fönstret Egenskaper .
- I fönstret Egenskaper ändrar du egenskapen Bädda in interoptyper från Sant till Falskt.
- Upprepa steg 1 och 2 i den här proceduren för
Microsoft.Office.Interop.Word. - I C# kommenterar du ut de två anropen till
Autofiti slutet avDisplayInExcelmetoden. - Tryck på F5 för att kontrollera att projektet fortfarande körs korrekt.
- Upprepa steg 1–3 från föregående procedur för att öppna monteringsfönstret. Observera att
Microsoft.Office.Interop.WordochMicrosoft.Office.Interop.Excelinte längre finns i listan över inbäddade sammansättningar. - Dubbelklicka på MANIFEST-ikonen och bläddra igenom listan över refererade sammansättningar. Både
Microsoft.Office.Interop.WordochMicrosoft.Office.Interop.Excelfinns i listan. Eftersom programmet refererar till Excel- och Word-PIA:erna och egenskapen Bädda in interoptyper är False, måste båda sammansättningarna finnas på slutanvändarens dator. - I Visual Studio väljer du Rensa lösning på menyn Skapa för att rensa det slutförda projektet.
Se även
- Automatiskt implementerade egenskaper (C#)
- Initierare för objekt och samling
- Visual Studio Tools för Office (VSTO)
- Namngivna och valfria argument
- Dynamisk
- Använda dynamisk typ
- Lambda-uttryck (C#)
- Genomgång: Bädda in typinformation från Microsoft Office-sammansättningar i Visual Studio
- Genomgång: Bädda in typer från hanterade sammansättningar
- Genomgång: Skapa ditt första VSTO-tillägg för Excel