Przewodnik: Programowanie pakietu Office w języku C#
Język C# oferuje funkcje ulepszające programowanie pakietu Microsoft Office. Przydatne funkcje języka C# obejmują argumenty nazwane i opcjonalne oraz zwracane wartości typu dynamic
. W programowaniu COM można pominąć ref
słowo kluczowe i uzyskać dostęp do indeksowanych właściwości.
Oba języki umożliwiają osadzanie informacji o typie, co umożliwia wdrażanie zestawów, które współdziałają ze składnikami MODELU COM bez wdrażania podstawowych zestawów międzyoperacyjnych (PIA) na komputerze użytkownika. Aby uzyskać więcej informacji, zobacz Przewodnik: osadzanie typów z zarządzanych zestawów.
Ten przewodnik przedstawia te funkcje w kontekście programowania pakietu Office, ale wiele z tych funkcji jest również przydatnych w ogólnym programowaniu. W przewodniku użyjesz aplikacji dodatku programu Excel do utworzenia skoroszytu programu Excel. Następnie utworzysz dokument programu Word zawierający link do skoroszytu. Na koniec zobaczysz, jak włączyć i wyłączyć zależność PIA.
Ważne
Program VSTO (Visual Studio Tools dla pakietu Office) opiera się na programie .NET Framework. Dodatki COM można również napisać za pomocą programu .NET Framework. Nie można utworzyć dodatków pakietu Office z platformami .NET Core i .NET 5+, najnowszymi wersjami platformy .NET. Dzieje się tak, ponieważ program .NET Core/.NET 5+ nie może współpracować z programem .NET Framework w tym samym procesie i może prowadzić do błędów ładowania dodatków. Możesz nadal używać programu .NET Framework do pisania dodatków VSTO i COM dla pakietu Office. Firma Microsoft nie zaktualizuje programu VSTO ani platformy dodatku COM w celu korzystania z platformy .NET Core lub .NET 5+. Możesz korzystać z platform .NET Core i .NET 5+, w tym ASP.NET Core, aby utworzyć stronę serwera dodatków pakietu Office Web.
Wymagania wstępne
Aby ukończyć ten przewodnik, musisz mieć zainstalowany program Microsoft Office Excel i program Microsoft Office Word na komputerze.
Uwaga
Na komputerze w poniższych instrukcjach mogą być wyświetlane inne nazwy i lokalizacje niektórych elementów interfejsu użytkownika programu Visual Studio. Te elementy są określane przez numer wersji Visual Studio oraz twoje ustawienia. Aby uzyskać więcej informacji, zobacz Personalizowanie środowiska IDE.
Konfigurowanie aplikacji dodatku programu Excel
- Uruchom program Visual Studio.
- W menu Plik wskaż pozycję Nowy, a następnie wybierz pozycję Projekt.
- W okienku Zainstalowane szablony rozwiń węzeł C#, rozwiń węzeł Office, a następnie wybierz rok wersji produktu pakietu Office.
- W okienku Szablony wybierz pozycję Dodatek do wersji> programu Excel<.
- Przyjrzyj się górnej części okienka Szablony , aby upewnić się, że program .NET Framework 4 lub nowsza wersja jest wyświetlany w polu Platforma docelowa .
- Wpisz nazwę projektu w polu Nazwa , jeśli chcesz.
- Wybierz przycisk OK.
- Nowy projekt zostanie wyświetlony w Eksplorator rozwiązań.
Dodawanie odwołań
- W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nazwę projektu, a następnie wybierz pozycję Dodaj odwołanie. Zostanie wyświetlone okno dialogowe Dodawanie odwołania .
- Na karcie Zestawy wybierz pozycję Microsoft.Office.Interop.Excel, wersja (dla klucza numerów
<version>.0.0.0
wersji produktu pakietu Office, zobacz Microsoft Versions), na liście Nazwa składnika, a następnie przytrzymaj naciśnięty klawisz CTRL i wybierz pozycję Microsoft.Office.Interop.Word,version <version>.0.0.0
. Jeśli zestawy nie są widoczne, może być konieczne ich zainstalowanie (zobacz Instrukcje: instalowanie podstawowych zestawów międzyoperacyjnych pakietu Office). - Wybierz przycisk OK.
Dodawanie niezbędnych instrukcji Import lub używanie dyrektyw
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy plik ThisAddIn.cs, a następnie wybierz polecenie Wyświetl kod. Dodaj następujące using
dyrektywy (C#) na początku pliku kodu, jeśli nie są jeszcze obecne.
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;
Tworzenie listy kont bankowych
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy nazwę projektu, wybierz pozycję Dodaj, a następnie wybierz pozycję Klasa. Nadaj klasie nazwę Account.cs. Wybierz pozycję Dodaj. Zastąp definicję Account
klasy następującym kodem. Definicje klas używają automatycznie zaimplementowanych właściwości.
class Account
{
public int ID { get; set; }
public double Balance { get; set; }
}
Aby utworzyć listę zawierającą bankAccounts
dwa konta, dodaj następujący kod do ThisAddIn_Startup
metody w pliku ThisAddIn.cs. Deklaracje listy używają inicjatorów kolekcji.
var bankAccounts = new List<Account>
{
new Account
{
ID = 345,
Balance = 541.27
},
new Account
{
ID = 123,
Balance = -127.44
}
};
Eksportowanie danych do programu Excel
W tym samym pliku dodaj następującą metodę do ThisAddIn
klasy . Metoda konfiguruje skoroszyt programu Excel i eksportuje do niego dane.
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();
}
- Metoda Add ma opcjonalny parametr służący do określania określonego szablonu. Parametry opcjonalne umożliwiają pominięcie argumentu dla tego parametru, jeśli chcesz użyć wartości domyślnej parametru. Ponieważ w poprzednim przykładzie nie ma argumentów,
Add
używa szablonu domyślnego i tworzy nowy skoroszyt. Równoważna instrukcja we wcześniejszych wersjach języka C# wymaga argumentu zastępczego:excelApp.Workbooks.Add(Type.Missing)
. Aby uzyskać więcej informacji, zobacz Argumenty nazwane i opcjonalne. - Właściwości
Range
iOffset
obiektu Range używają funkcji właściwości indeksowanych . Ta funkcja umożliwia korzystanie z tych właściwości z typów COM przy użyciu następującej typowej składni języka C#. Właściwości indeksowane umożliwiają również używanieValue
właściwościRange
obiektu, eliminując konieczność używaniaValue2
właściwości . WłaściwośćValue
jest indeksowana, ale indeks jest opcjonalny. Opcjonalne argumenty i właściwości indeksowane współpracują ze sobą w poniższym przykładzie.
// Visual C# 2010 provides indexed properties for COM programming.
excelApp.Range["A1"].Value = "ID";
excelApp.ActiveCell.Offset[1, 0].Select();
Nie można utworzyć własnych właściwości indeksowanych. Funkcja obsługuje tylko użycie istniejących właściwości indeksowanych.
Dodaj następujący kod na końcu, DisplayInExcel
aby dostosować szerokość kolumn w celu dopasowania jej do zawartości.
excelApp.Columns[1].AutoFit();
excelApp.Columns[2].AutoFit();
Te dodatki pokazują inną funkcję w języku C#: traktowanie Object
wartości zwracanych z hostów COM, takich jak Pakiet Office, tak jakby miały dynamiczny typ. Obiekty COM są traktowane automatycznie dynamic
, gdy opcja Osadź typy międzyoperacyjności ma wartość domyślną , True
lub, co równoważne, podczas odwołowania się do zestawu za pomocą opcji kompilatora EmbedInteropTypes . Aby uzyskać więcej informacji na temat osadzania typów międzyoperacyjnych, zobacz procedury "Aby znaleźć odwołanie do danych osobowych" i "Aby przywrócić zależność pia", w dalszej części tego artykułu. Aby uzyskać więcej informacji na temat dynamic
programu , zobacz dynamic or Using Type dynamic (Dynamiczne lub Używanie typu dynamicznego).
Wywoływanie elementu DisplayInExcel
Dodaj następujący kod na końcu ThisAddIn_StartUp
metody . Wywołanie metody zawiera DisplayInExcel
dwa argumenty. Pierwszy argument to nazwa listy przetworzonych kont. Drugi argument to wielowierszowe wyrażenie lambda definiujące sposób przetwarzania danych. Wartości ID
i balance
dla każdego konta są wyświetlane w sąsiednich komórkach, a wiersz jest wyświetlany na czerwono, jeśli saldo jest mniejsze niż zero. Aby uzyskać więcej informacji, zobacz Wyrażenia lambda.
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;
}
});
Aby uruchomić program, naciśnij klawisz F5. Zostanie wyświetlony arkusz programu Excel zawierający dane z kont.
Dodawanie dokumentu programu Word
Dodaj następujący kod na końcu ThisAddIn_StartUp
metody , aby utworzyć dokument programu Word zawierający link do skoroszytu programu Excel.
var wordApp = new Word.Application();
wordApp.Visible = true;
wordApp.Documents.Add();
wordApp.Selection.PasteSpecial(Link: true, DisplayAsIcon: true);
Ten kod demonstruje kilka funkcji w języku C#: możliwość pominięcia słowa kluczowego ref
w programowaniu COM, nazwanych argumentach i opcjonalnych argumentach. Metoda PasteSpecial ma siedem parametrów, z których wszystkie są opcjonalnymi parametrami odwołania. Argumenty nazwane i opcjonalne umożliwiają wyznaczenie parametrów, do których chcesz uzyskać dostęp według nazwy, oraz wysyłanie argumentów tylko do tych parametrów. W tym przykładzie argumenty wskazują utworzenie linku do skoroszytu w Schowku (parametr Link
) i wyświetlenie linku w dokumencie programu Word jako ikony (parametru DisplayAsIcon
). Język C# umożliwia również pominięcie słowa kluczowego ref
dla tych argumentów.
Uruchamianie aplikacji
Naciśnij klawisz F5, aby uruchomić aplikację. Program Excel uruchamia i wyświetla tabelę zawierającą informacje z dwóch kont w programie bankAccounts
. Następnie zostanie wyświetlony dokument programu Word zawierający link do tabeli programu Excel.
Czyszczenie ukończonego projektu
W programie Visual Studio wybierz pozycję Wyczyść rozwiązanie w menu Kompilacja. W przeciwnym razie dodatek jest uruchamiany za każdym razem, gdy otworzysz program Excel na komputerze.
Znajdowanie dokumentacji usługi PIA
- Uruchom ponownie aplikację, ale nie wybieraj opcji Wyczyść rozwiązanie.
- Wybierz przycisk Start. Znajdź wersję> programu Microsoft Visual Studio <i otwórz wiersz polecenia dla deweloperów.
- Wpisz
ildasm
wiersz polecenia dewelopera dla programu Visual Studio, a następnie naciśnij klawisz ENTER. Zostanie wyświetlone okno IL DASM. - W menu Plik w oknie IL DASM wybierz pozycję Plik>Otwórz. Kliknij dwukrotnie wersję> programu Visual Studio<, a następnie kliknij dwukrotnie pozycję Projekty. Otwórz folder dla projektu i poszukaj w folderze bin/Debug nazwy projektu.dll. Kliknij dwukrotnie nazwę projektu.dll. Nowe okno wyświetla atrybuty projektu oprócz odwołań do innych modułów i zestawów. Zestaw zawiera przestrzenie
Microsoft.Office.Interop.Excel
nazw iMicrosoft.Office.Interop.Word
. Domyślnie w programie Visual Studio kompilator importuje potrzebne typy z przywoływanej usługi PIA do zestawu. Aby uzyskać więcej informacji, zobacz How to: View Assembly Contents (Instrukcje: wyświetlanie zawartości zestawu). - Kliknij dwukrotnie ikonę MANIFEST . Zostanie wyświetlone okno zawierające listę zestawów zawierających elementy, do których odwołuje się projekt.
Microsoft.Office.Interop.Excel
iMicrosoft.Office.Interop.Word
nie znajdują się na liście. Ponieważ zostały zaimportowane typy wymagane przez projekt do zestawu, nie musisz instalować odwołań do usługi PIA. Importowanie typów do zestawu ułatwia wdrażanie. Dane osobowe nie muszą być obecne na komputerze użytkownika. Aplikacja nie wymaga wdrożenia określonej wersji usługi PIA. Aplikacje mogą współdziałać z wieloma wersjami pakietu Office, pod warunkiem że istnieją niezbędne interfejsy API we wszystkich wersjach. Ponieważ wdrażanie umów PIA nie jest już konieczne, możesz utworzyć aplikację w zaawansowanych scenariuszach, które współdziałają z wieloma wersjami pakietu Office, w tym z wcześniejszymi wersjami. Kod nie może używać żadnych interfejsów API, które nie są dostępne w wersji pakietu Office, z którą pracujesz. Nie zawsze jest jasne, czy określony interfejs API był dostępny we wcześniejszej wersji. Praca z wcześniejszymi wersjami pakietu Office nie jest zalecana. - Zamknij okno manifestu i okno zestawu.
Przywracanie zależności usługi PIA
- W Eksplorator rozwiązań wybierz przycisk Pokaż wszystkie pliki. Rozwiń folder Odwołania i wybierz pozycję Microsoft.Office.Interop.Excel. Naciśnij klawisz F4, aby wyświetlić okno Właściwości .
- W oknie Właściwości zmień właściwość Embed Interop Types (Osadź typy międzyoperacyjnych) z True na False.
- Powtórz kroki 1 i 2 w tej procedurze dla elementu
Microsoft.Office.Interop.Word
. - W języku C# dodaj komentarz do dwóch wywołań
Autofit
na końcuDisplayInExcel
metody . - Naciśnij klawisz F5, aby sprawdzić, czy projekt nadal działa poprawnie.
- Powtórz kroki od 1 do 3 z poprzedniej procedury, aby otworzyć okno zestawu. Zwróć uwagę, że
Microsoft.Office.Interop.Word
zestawyMicrosoft.Office.Interop.Excel
osadzone nie znajdują się już na liście zestawów osadzonych. - Kliknij dwukrotnie ikonę MANIFEST i przewiń listę zestawów, do których się odwołujesz. Oba
Microsoft.Office.Interop.Word
elementy iMicrosoft.Office.Interop.Excel
znajdują się na liście. Ponieważ aplikacja odwołuje się do danych PIA programu Excel i Word, a właściwość Embed Interop Types ma wartość False, oba zestawy muszą istnieć na komputerze użytkownika końcowego. - W programie Visual Studio wybierz pozycję Wyczyść rozwiązanie w menu Kompilacja , aby wyczyścić ukończony projekt.
Zobacz też
- Właściwości zaimplementowane automatycznie (C#)
- Inicjatory obiektów i kolekcji
- Visual Studio Tools dla pakietu Office (VSTO)
- Argumenty nazwane i opcjonalne
- dynamic
- Używanie typu dynamicznego
- Wyrażenia lambda (C#)
- Przewodnik: osadzanie informacji o typie z zestawów Microsoft Office w programie Visual Studio
- Przewodnik: osadzanie typów z zarządzanych zestawów
- Przewodnik: Tworzenie pierwszego dodatku VSTO dla programu Excel
Opinia
https://aka.ms/ContentUserFeedback.
Już wkrótce: w ciągu 2024 r. będziemy stopniowo usuwać problemy z usługą GitHub jako mechanizm opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla