Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
C# biedt functies waarmee Microsoft Office-programmering wordt verbeterd. Handige C#-functies zijn benoemde en optionele argumenten en retourwaarden van het type dynamic. In COM-programmering kunt u het ref trefwoord weglaten en toegang krijgen tot geïndexeerde eigenschappen.
Beide talen maken het insluiten van typegegevens mogelijk, waardoor de implementatie van assembly's die communiceren met COM-onderdelen zonder dat primaire interopassembly's (PIA's) op de computer van de gebruiker worden geïmplementeerd. Zie Overzicht: Typen insluiten vanuit beheerde assembly's voor meer informatie.
In dit scenario ziet u deze functies in de context van Het programmeren van Office, maar veel van deze functies zijn ook handig in algemene programmering. In het overzicht gebruikt u een Excel-invoegtoepassingstoepassing om een Excel-werkmap te maken. Vervolgens maakt u een Word-document dat een koppeling naar de werkmap bevat. Ten slotte ziet u hoe u de PF-afhankelijkheid inschakelt en uitschakelt.
Belangrijk
VSTO (Visual Studio Tools for Office) is afhankelijk van .NET Framework. COM-invoegtoepassingen kunnen ook worden geschreven met .NET Framework. Office-invoegtoepassingen kunnen niet worden gemaakt met .NET Core en .NET 5+, de nieuwste versies van .NET. Dit komt doordat .NET Core/.NET 5+ niet kan samenwerken met .NET Framework in hetzelfde proces en kan leiden tot invoegtoepassingsfouten. U kunt .NET Framework blijven gebruiken om VSTO- en COM-invoegtoepassingen voor Office te schrijven. Microsoft werkt VSTO of het COM-invoegtoepassingsplatform niet bij om .NET Core of .NET 5+ te gebruiken. U kunt gebruikmaken van .NET Core en .NET 5+, inclusief ASP.NET Core, om de serverzijde van Office Web-invoegtoepassingen te maken.
Vereisten
U moet Microsoft Office Excel en Microsoft Office Word op uw computer hebben geïnstalleerd om dit scenario te voltooien.
Notitie
Mogelijk worden op uw computer verschillende namen of locaties weergegeven voor sommige elementen van de Visual Studio-gebruikersinterface in de volgende instructies. De Visual Studio-editie die u hebt en de instellingen die u gebruikt, bepalen deze elementen. Zie Personalizing the IDE (Personalizing the IDE) voor meer informatie.
Een Excel-invoegtoepassingstoepassing instellen
- Start Visual Studio.
- Wijs in het menu Bestand de optie Nieuw aan en selecteer Vervolgens Project.
- Vouw in het deelvenster Geïnstalleerde sjablonen C# uit, vouw Office uit en selecteer vervolgens het versiejaar van het Office-product.
- Selecteer de Excel-versieinvoegtoepassing <> in het deelvenster Sjablonen.
- Kijk boven in het deelvenster Sjablonen om ervoor te zorgen dat .NET Framework 4 of een latere versie wordt weergegeven in het vak Target Framework .
- Typ desgewenst een naam voor uw project in het vak Naam .
- Selecteer OK.
- Het nieuwe project wordt weergegeven in Solution Explorer.
Verwijzingen toevoegen
- Klik in Solution Explorer met de rechtermuisknop op de naam van uw project en selecteer Vervolgens Verwijzing toevoegen. Het dialoogvenster Verwijzing toevoegen wordt weergegeven.
- Selecteer op het tabblad Assembly's De optie Microsoft.Office.Interop.Excel, versie
<version>.0.0.0(voor een sleutel voor de office-productversies, zie Microsoft-versies), in de lijst Met onderdeelnamen en houd vervolgens Ctrl ingedrukt en selecteer Microsoft.Office.Interop.Word,version <version>.0.0.0. Als u de assembly's niet ziet, moet u deze mogelijk installeren (zie procedure: Primaire interop-assembly's van Office installeren). - Selecteer OK.
Benodigde importinstructies of gebruiksinstructies toevoegen
Klik in Solution Explorer met de rechtermuisknop op het bestand ThisAddIn.cs en selecteer Code weergeven. Voeg de volgende using instructies (C#) toe aan het begin van het codebestand als deze nog niet aanwezig zijn.
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
Een lijst met bankrekeningen maken
Klik in Solution Explorer met de rechtermuisknop op de naam van uw project, selecteer Toevoegen en selecteer vervolgens Klasse. Geef de klasse Account.cs een naam. Selecteer Toevoegen. Vervang de definitie van de Account klasse door de volgende code. De klassedefinities maken gebruik van automatisch geïmplementeerde eigenschappen.
class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
Als u een bankAccounts lijst met twee accounts wilt maken, voegt u de volgende code toe aan de ThisAddIn_Startup methode in ThisAddIn.cs. De lijstdeclaraties maken gebruik van initialisatie van verzamelingen.
var bankAccounts = new List<Account>
{
new Account
{
ID = 345,
Balance = 541.27
},
new Account
{
ID = 123,
Balance = -127.44
}
};
Gegevens exporteren naar Excel
Voeg in hetzelfde bestand de volgende methode toe aan de ThisAddIn klasse. Met de methode wordt een Excel-werkmap ingesteld en worden er gegevens naar geëxporteerd.
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();
}
- Method Add heeft een optionele parameter voor het opgeven van een bepaalde sjabloon. Met optionele parameters kunt u het argument voor die parameter weglaten als u de standaardwaarde van de parameter wilt gebruiken. Omdat het vorige voorbeeld geen argumenten heeft,
Addgebruikt u de standaardsjabloon en maakt u een nieuwe werkmap. Voor de equivalente instructie in eerdere versies van C# is een tijdelijke aanduiding vereist:excelApp.Workbooks.Add(Type.Missing). Zie Benoemde en optionele argumenten voor meer informatie. - De
RangeeigenschappenOffsetvan het bereikobject maken gebruik van de functie geïndexeerde eigenschappen . Met deze functie kunt u deze eigenschappen van COM-typen gebruiken met behulp van de volgende typische C#-syntaxis. Met geïndexeerde eigenschappen kunt u ook deValueeigenschap van hetRangeobject gebruiken, waardoor u deValue2eigenschap niet meer hoeft te gebruiken. DeValueeigenschap wordt geïndexeerd, maar de index is optioneel. Optionele argumenten en geïndexeerde eigenschappen werken samen in het volgende voorbeeld.
// Visual C# 2010 provides indexed properties for COM programming.
excelApp.Range["A1"].Value = "ID";
excelApp.ActiveCell.Offset[1, 0].Select();
U kunt geen geïndexeerde eigenschappen van uw eigen eigenschappen maken. De functie ondersteunt alleen het verbruik van bestaande geïndexeerde eigenschappen.
Voeg de volgende code toe aan het einde van het aanpassen van DisplayInExcel de kolombreedten aan de inhoud.
excelApp.Columns[1].AutoFit();
excelApp.Columns[2].AutoFit();
Deze toevoegingen demonstreren een andere functie in C#: waarden Object behandelen die worden geretourneerd door COM-hosts zoals Office, alsof ze een dynamisch type hebben. COM-objecten worden automatisch dynamic behandeld wanneer Insluiten interoperabiliteitstypen de standaardwaarde heeft, Trueof, gelijkwaardig, wanneer u naar de assembly verwijst met de compileroptie EmbedInteropTypes . Zie voor meer informatie over het insluiten van interoperabiliteitstypen de procedures "To find the PIA reference" en "To restore the PF dependency" verderop in dit artikel. Zie dynamisch of Dynamisch type gebruiken voor meer informatie over.dynamic
DisplayInExcel aanroepen
Voeg de volgende code toe aan het einde van de ThisAddIn_StartUp methode. De aanroep om twee argumenten te DisplayInExcel bevatten. Het eerste argument is de naam van de lijst met verwerkte accounts. Het tweede argument is een lambda-expressie met meerdere regels die definieert hoe de gegevens moeten worden verwerkt. De ID waarden en balance waarden voor elk account worden weergegeven in aangrenzende cellen en de rij wordt rood weergegeven als het saldo kleiner is dan nul. Zie Lambda-expressies voor meer informatie.
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;
}
});
Druk op F5 om het programma uit te voeren. Er wordt een Excel-werkblad weergegeven met de gegevens uit de accounts.
Een Word-document toevoegen
Voeg de volgende code toe aan het einde van de ThisAddIn_StartUp methode om een Word-document te maken dat een koppeling naar de Excel-werkmap bevat.
var wordApp = new Word.Application();
wordApp.Visible = true;
wordApp.Documents.Add();
wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Deze code demonstreert verschillende functies in C#: de mogelijkheid om het ref trefwoord in COM-programmering, benoemde argumenten en optionele argumenten weg te laten. De methode PasteSpecial heeft zeven parameters, die allemaal optionele referentieparameters zijn. Met benoemde en optionele argumenten kunt u de parameters aanwijzen die u wilt openen op naam en argumenten naar alleen die parameters verzenden. In dit voorbeeld geven argumenten aan dat er een koppeling naar de werkmap wordt gemaakt op het Klembord (parameter Link) en dat de koppeling in het Word-document wordt weergegeven als pictogram (parameter DisplayAsIcon). Met C# kunt u ook het ref trefwoord voor deze argumenten weglaten.
De toepassing uitvoeren
Druk op F5 om de toepassing uit te voeren. Excel start en geeft een tabel weer die de informatie van de twee accounts in bankAccountsbevat. Vervolgens wordt een Word-document weergegeven dat een koppeling naar de Excel-tabel bevat.
Het voltooide project opschonen
Selecteer in Visual Studio Clean Solution in het menu Build . Anders wordt de invoegtoepassing uitgevoerd telkens wanneer u Excel op uw computer opent.
De REFERENTIE VOOR HET AANTAL zoeken
- Voer de toepassing opnieuw uit, maar selecteer Geen schone oplossing.
- Selecteer het startmenu. Zoek de Microsoft Visual Studio-versie <> en open een opdrachtprompt voor ontwikkelaars.
- Typ
ildasmin het venster Opdrachtprompt voor Ontwikkelaars voor Visual Studio en druk vervolgens op Enter. Het IL DASM-venster wordt weergegeven. - Selecteer Bestand>openen in het menu Bestand in het IL DASM-venster. Dubbelklik op Visual Studio-versie>< en dubbelklik vervolgens op Projecten. Open de map voor uw project en zoek in de map bin/Debug voor uw projectnaam.dll. Dubbelklik op de projectnaam.dll. In een nieuw venster worden de kenmerken van uw project weergegeven, naast verwijzingen naar andere modules en assembly's. De assembly bevat de naamruimten
Microsoft.Office.Interop.ExcelenMicrosoft.Office.Interop.Word. Standaard importeert de compiler in Visual Studio de typen die u nodig hebt van een naar EEN PF in uw assembly. Zie Procedure: Assembly-inhoud weergeven voor meer informatie. - Dubbelklik op het manifestpictogram . Er wordt een venster weergegeven met een lijst met assembly's die items bevatten waarnaar wordt verwezen door het project.
Microsoft.Office.Interop.ExcelenMicrosoft.Office.Interop.Wordzich niet in de lijst. Omdat u de typen die uw project nodig heeft in uw assembly hebt geïmporteerd, hoeft u geen verwijzingen naar een PIA te installeren. Door de typen in uw assembly te importeren, is de implementatie eenvoudiger. De PIA's hoeven niet aanwezig te zijn op de computer van de gebruiker. Een toepassing vereist geen implementatie van een specifieke versie van een PF. Toepassingen kunnen werken met meerdere versies van Office, mits de benodigde API's in alle versies bestaan. Omdat de implementatie van PIA's niet meer nodig is, kunt u een toepassing maken in geavanceerde scenario's die werken met meerdere versies van Office, waaronder eerdere versies. Uw code kan geen API's gebruiken die niet beschikbaar zijn in de versie van Office waarmee u werkt. Het is niet altijd duidelijk of een bepaalde API beschikbaar was in een eerdere versie. Werken met eerdere versies van Office wordt niet aanbevolen. - Sluit het manifestvenster en het assemblyvenster.
De afhankelijkheid VAN PIA herstellen
- Selecteer in Solution Explorer de knop Alle bestanden weergeven. Vouw de map Verwijzingen uit en selecteer Microsoft.Office.Interop.Excel. Druk op F4 om het venster Eigenschappen weer te geven.
- Wijzig in het venster Eigenschappen de eigenschap Insluiten interoperabiliteitstypen van Waar in Onwaar.
- Herhaal stap 1 en 2 in deze procedure voor
Microsoft.Office.Interop.Word. - In C# markeert u de twee aanroepen aan
Autofithet einde van deDisplayInExcelmethode. - Druk op F5 om te controleren of het project nog steeds correct wordt uitgevoerd.
- Herhaal stap 1-3 uit de vorige procedure om het assemblyvenster te openen. U ziet dat
Microsoft.Office.Interop.WordenMicrosoft.Office.Interop.Excelzich niet meer in de lijst met ingesloten assembly's bevinden. - Dubbelklik op het MANIFEST-pictogram en blader door de lijst met assembly's waarnaar wordt verwezen. Beide
Microsoft.Office.Interop.WordenMicrosoft.Office.Interop.Excelbevinden zich in de lijst. Omdat de toepassing verwijst naar de Excel- en Word-PIA's en de eigenschap Insluiten interoperabiliteitstypen Onwaar is, moeten beide assembly's aanwezig zijn op de computer van de eindgebruiker. - Selecteer in Visual Studio Clean Solution in het menu Build om het voltooide project op te schonen.
Zie ook
- Eigenschappen die automatisch zijn geïmplementeerd (C#)
- Initializers voor objecten en verzamelingen
- Visual Studio Tools voor Office (VSTO)
- Benoemde en optionele argumenten
- Dynamische
- Dynamisch type gebruiken
- Lambda-expressies (C#)
- Overzicht: Informatie over het insluiten van typegegevens van Microsoft Office-assembly's in Visual Studio
- Overzicht: Typen insluiten vanuit beheerde assembly's
- Overzicht: Uw eerste VSTO-invoegtoepassing voor Excel maken