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

  1. Uruchom program Visual Studio.
  2. W menu Plik wskaż pozycję Nowy, a następnie wybierz pozycję Projekt.
  3. W okienku Zainstalowane szablony rozwiń węzeł C#, rozwiń węzeł Office, a następnie wybierz rok wersji produktu pakietu Office.
  4. W okienku Szablony wybierz pozycję Dodatek do wersji> programu Excel<.
  5. 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 .
  6. Wpisz nazwę projektu w polu Nazwa , jeśli chcesz.
  7. Wybierz przycisk OK.
  8. Nowy projekt zostanie wyświetlony w Eksplorator rozwiązań.

Dodawanie odwołań

  1. 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 .
  2. 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).
  3. 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 i Offsetobiektu 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żywanie Value właściwości Range obiektu, eliminując konieczność używania Value2 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ą , Truelub, 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 dynamicprogramu , 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

  1. Uruchom ponownie aplikację, ale nie wybieraj opcji Wyczyść rozwiązanie.
  2. Wybierz przycisk Start. Znajdź wersję> programu Microsoft Visual Studio <i otwórz wiersz polecenia dla deweloperów.
  3. Wpisz ildasm wiersz polecenia dewelopera dla programu Visual Studio, a następnie naciśnij klawisz ENTER. Zostanie wyświetlone okno IL DASM.
  4. 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 i Microsoft.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).
  5. 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 i Microsoft.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.
  6. Zamknij okno manifestu i okno zestawu.

Przywracanie zależności usługi PIA

  1. 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 .
  2. W oknie Właściwości zmień właściwość Embed Interop Types (Osadź typy międzyoperacyjnych) z True na False.
  3. Powtórz kroki 1 i 2 w tej procedurze dla elementu Microsoft.Office.Interop.Word.
  4. W języku C# dodaj komentarz do dwóch wywołań Autofit na końcu DisplayInExcel metody .
  5. Naciśnij klawisz F5, aby sprawdzić, czy projekt nadal działa poprawnie.
  6. Powtórz kroki od 1 do 3 z poprzedniej procedury, aby otworzyć okno zestawu. Zwróć uwagę, że Microsoft.Office.Interop.Word zestawy Microsoft.Office.Interop.Excel osadzone nie znajdują się już na liście zestawów osadzonych.
  7. Kliknij dwukrotnie ikonę MANIFEST i przewiń listę zestawów, do których się odwołujesz. Oba Microsoft.Office.Interop.Word elementy i Microsoft.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.
  8. W programie Visual Studio wybierz pozycję Wyczyść rozwiązanie w menu Kompilacja , aby wyczyścić ukończony projekt.

Zobacz też