Porady: uzyskiwanie dostępu do obiektów międzyoperacyjności pakietu Office za pomocą funkcji Visual C# (Przewodnik po programowaniu w języku C#)

Program Visual C# 2010 wprowadzono nowe funkcje, które upraszczają dostęp do interfejsu API Office obiektów.Nowe funkcje obejmują nazwanych i opcjonalny argument, nazywany nowego typu dynamicoraz możliwość tworzenia przekazywać argumenty do odwołania parametrów metod modelu COM, tak jakby były wartości parametrów.

W tym temacie nowe funkcje posłuży do zapisania kodu, który tworzy i wyświetla arkusz programu Microsoft Office Excel.Spowoduje to zapisywać kod, aby dodać dokument Word pakietu Office, który zawiera ikonę, która jest połączona z arkusza programu Excel.

Do wykonania tej procedury, musi mieć Microsoft Office Excel 2007 i Microsoft Office Word 2007 lub nowszy zainstalowany na tym komputerze.

Jeśli używasz systemu operacyjnego, który jest starsza niż Windows Vista, upewnij się, że Program .NET Framework 2,0 jest zainstalowana.

[!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 Dostosowywanie ustawień środowiska deweloperskiego w Visual Studio.

Aby utworzyć nową aplikację konsoli

  1. Uruchom program Visual Studio.

  2. Na pliku menu, wskaż opcję nowy, a następnie kliknij przycisk projektu.Pojawi się okno dialogowe Nowy projekt.

  3. W zainstalowane szablony okienku rozwiń Visual C#, a następnie kliknij przycisk Windows.

  4. Szukaj w górnej części nowy projekt okno dialogowe, aby upewnić się, że .NET Framework 4 (lub nowszego) jest wybrana jako docelowa platforma.

  5. W szablony okienku kliknij aplikacji konsoli.

  6. Wpisz nazwę projektu w nazwa pola.

  7. Kliknij przycisk OK.

    Zostanie wyświetlony nowy projekt Eksploratora rozwiązań.

Odwołuje się do dodania

  1. W Eksploratora rozwiązań, kliknij prawym przyciskiem myszy nazwę projektu, a następnie kliknij przycisk Dodaj odwołanie.Pojawi się okno dialogowe Dodaj odwołanie.

  2. Na zestawy zaznacz opcję Microsoft.Office.Interop.Word w nazwa składnika liście, a następnie przytrzymaj klawisz CTRL klucza i wybierz Microsoft.Office.Interop.Excel.Jeśli zestawy nie są widoczne, może być konieczne do zapewnienia zainstalowane i wyświetlane (zobacz Porady: instalowanie podstawowych zestawów międzyoperacyjnych pakietu Office)

  3. Kliknij przycisk OK.

Aby dodać niezbędne, za pomocą dyrektyw

  1. W Eksploratora rozwiązań, kliknij prawym przyciskiem myszy plik Program.cs pliku, a następnie kliknij przycisk widoku Kod.

  2. Dodaj następujący using dyrektywy do początku pliku kodu.

    using Excel = Microsoft.Office.Interop.Excel;
    using Word = Microsoft.Office.Interop.Word;
    

Aby utworzyć listę kont bank

  1. Wklej do poniższej definicji klasy plik Program.cs, w obszarze Program klasy.

    public class Account
    {
        public int ID { get; set; }
        public double Balance { get; set; }
    }
    
  2. Dodaj następujący kod, aby Main metodę w celu utworzenia bankAccounts listy, która zawiera dwa konta.

    // Create a list of accounts. 
    var bankAccounts = new List<Account> {
        new Account { 
                      ID = 345678,
                      Balance = 541.27
                    },
        new Account {
                      ID = 1230221,
                      Balance = -127.44
                    }
    };
    

Do deklarowania metodę, która eksportuje informacje o koncie do programu Excel

  1. Dodaj do następującej metody Program klasy skonfigurowanie arkusza programu Excel.

    Metoda Dodaj ma parametr opcjonalny służącą do określonego szablonu.Parametry opcjonalne, nowe w Visual C# 2010, można pominąć argument dla tego parametru, jeśli chcesz użyć wartości domyślnej wartości parametru.Brak argumentu są wysyłane następujące kodu i Add korzysta z domyślnego szablonu i tworzy nowy skoroszyt.Instrukcja równoważne we wcześniejszych wersjach programu C# wymaga argumentu symbol zastępczy: 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 praticular 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;
    }
    
  2. Dodaj następujący kod na końcu DisplayInExcel.Kod wstawia wartości do pierwszych dwóch kolumn będących jej pierwszego wiersza arkusza.

    // Establish column headings in cells A1 and B1.
    workSheet.Cells[1, "A"] = "ID Number";
    workSheet.Cells[1, "B"] = "Current Balance";
    
  3. Dodaj następujący kod na końcu DisplayInExcel.foreach Pętli umieszcza informacje z listy kont do pierwszych dwóch kolumn będących jej kolejnych wierszy arkusza.

    var row = 1;
    foreach (var acct in accounts)
    {
        row++;
        workSheet.Cells[row, "A"] = acct.ID;
        workSheet.Cells[row, "B"] = acct.Balance;
    }
    
  4. Dodaj następujący kod na końcu DisplayInExcel do dopasowania szerokości kolumn, aby dopasować zawartość.

    workSheet.Columns[1].AutoFit();
    workSheet.Columns[2].AutoFit();
    

    Starsze niż C# wymaga jawnego rzutowania do tych operacji, ponieważ ExcelApp.Columns[1] zwraca Object, i AutoFit jest program Excel zakres metody.Poniższe wiersze pokazują rzutowania.

    ((Excel.Range)workSheet.Columns[1]).AutoFit();
    ((Excel.Range)workSheet.Columns[2]).AutoFit();
    

    Visual C# 2010i w nowszych wersjach, konwertuje zwróconego Object do dynamic automatycznie, jeśli odwołuje się do zestawu /link opcję kompilatora lub ekwiwalentnie Jeśli programu Excel osadzić typy usługę Międzyoperacyjną właściwość ma wartość true.Wartość true jest wartość domyślną dla tej właściwości.

Aby uruchomić projekt

  1. Dodaj następujący wiersz na końcu Main.

    // Display the list in an Excel spreadsheet.
    DisplayInExcel(bankAccounts);
    
  2. Naciśnij klawisze CTRL + F5.

    Zostanie wyświetlony arkusza programu Excel, zawierający dane z dwóch kont.

Aby dodać dokumentu programu Word

  1. Ilustrujące sposoby dodatkowe, w którym Visual C# 2010i w nowszych wersjach podnosi poziom Office programowania, następujący kod otwiera aplikację Word i tworzy ikonę, który stanowi łącze do arkusza programu Excel.

    Wklej metody CreateIconInWordDoc, podany w dalszej części tego kroku do Program klasy.CreateIconInWordDocużywa nazwanych i opcjonalny argument uproszczeniu wywołania metody do Dodaj i PasteSpecial.Te wywołania włączenie dwóch innych nowych funkcji wprowadzonych w Visual C# 2010 które upraszczają wywołania metody COM, które mają parametry odwołania.Najpierw możesz przesłać argumenty z parametrami odwołania tak, jakby były wartości parametrów.Oznacza to, że można wysłać wartości bezpośrednio, bez tworzenia dla każdego parametru odwołanie do zmiennej.Kompilator generuje tymczasowe zmiennych do przechowywania wartości argumentu i odrzuca zmienne, po powrocie z połączenia.Drugi, można pominąć ref słowo kluczowe na liście argumentów.

    Add Metoda ma cztery parametry odwołania, które są opcjonalne.W Visual C# 2010, lub nowszy, można pominąć argumenty dla wybranych lub wszystkich parametrów, jeśli chcesz użyć wartości domyślnych.W Visual C# 2008 i wcześniejszych wersji, należy podać argument dla każdego parametru i argument musi być zmienną, ponieważ parametry są parametry odwołania.

    PasteSpecial Metody Wstawia zawartość Schowka.Metoda ma siedmiu odwołania parametrów, które są opcjonalne.Poniższy kod określa argumenty dla dwóch z nich: Link, aby utworzyć łącze do źródła zawartości Schowka i DisplayAsIcon, aby wyświetlić łącze w postaci ikony.W Visual C# 2010, można użyć nazwanych argumentów dla tych dwóch i innych pominięty.Chociaż te parametry odwołanie, nie trzeba używać ref słowo kluczowe, lub można utworzyć zmiennej, aby wysłać w postaci argumentów.Wartości mogą być przesyłane bezpośrednio.W Visual C# 2008 i wcześniejszych wersji, należy wysłać zmiennej argumentu dla każdego parametru odwołania.

    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# 2010 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);
    }
    

    W Visual C# 2008 lub wcześniejszych wersji językowych, poniżej bardziej złożonych kod jest wymagany.

    static void CreateIconInWordDoc2008()
    {
        var wordApp = new Word.Application();
        wordApp.Visible = true;
    
        // The Add method has four parameters, all of which are optional.  
        // In Visual C# 2008 and earlier versions, an argument has to be sent  
        // for every parameter. Because the parameters are reference   
        // parameters of type object, you have to create an object variable 
        // for the arguments that represents 'no value'.  
    
        object useDefaultValue = Type.Missing;
    
        wordApp.Documents.Add(ref useDefaultValue, ref useDefaultValue,
            ref useDefaultValue, ref useDefaultValue);
    
        // PasteSpecial has seven reference parameters, all of which are 
        // optional. In this example, only two of the parameters require 
        // specified values, but in Visual C# 2008 an argument must be sent 
        // for each parameter. Because the parameters are reference parameters, 
        // you have to contruct variables for the arguments. 
        object link = true;
        object displayAsIcon = true;
    
        wordApp.Selection.PasteSpecial( ref useDefaultValue,
                                        ref link,
                                        ref useDefaultValue,
                                        ref displayAsIcon,
                                        ref useDefaultValue,
                                        ref useDefaultValue,
                                        ref useDefaultValue);
    }
    
  2. Na koniec należy dodać następującą instrukcję Main.

    // Create a Word document that contains an icon that links to 
    // the spreadsheet.
    CreateIconInWordDoc();
    
  3. Na koniec należy dodać następującą instrukcję DisplayInExcel.Copy Metody dodaje arkusza do Schowka.

    // 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();
    
  4. Naciśnij klawisze CTRL + F5.

    Dokumentu programu Word wyświetlany jest wyświetlana ikona.Kliknij dwukrotnie ikonę na przeniesienie arkusza na pierwszym planie.

Aby ustawić właściwość osadzić typy usługę Międzyoperacyjną

  1. Dodatkowe rozszerzenia są możliwe w przypadku wywołania typu modelu COM, który nie wymaga podstawowy zestaw współdziałania (PIA) w czasie wykonywania.Usuwanie zależności PIAs wyników w wersji niezależności i łatwiejsze wdrożenia.Aby uzyskać więcej informacji o zaletach programowania bez PIAs, zobacz Wskazówki: osadzanie typów z zarządzanych zestawów (C# i Visual Basic).

    Ponadto programowania jest łatwiejsze, ponieważ typy, które są wymagane i zwracane przez metody COM można przedstawić przy użyciu typu dynamic zamiast Object.Zmienne, które mają typ dynamic nie są uwzględniane do czasu wykonywania, eliminuje konieczność użycia jawnego rzutowania.Aby uzyskać więcej informacji, zobacz Używanie typu dynamicznego (Przewodnik programowania w języku C#).

    W Visual C# 2010, osadzanie informacji o typie zamiast PIAs jest domyślnym zachowaniem.Z powodu tego domyślne kilka poprzednich przykładach są uproszczone, ponieważ jawne Rzutowanie nie jest wymagane.Na przykład deklaracji worksheet w DisplayInExcel jest zapisywana jako Excel._Worksheet workSheet = excelApp.ActiveSheet zamiast Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet.Wywołania metody AutoFit w tej samej metody również wymaga jawnego rzutowania bez domyślnego, ponieważ ExcelApp.Columns[1] zwraca Object, i AutoFit jest metody programu Excel.Poniższy kod pokazuje rzutowania.

    ((Excel.Range)workSheet.Columns[1]).AutoFit();
    ((Excel.Range)workSheet.Columns[2]).AutoFit();
    
  2. Aby zmienić domyślną PIAs zamiast osadzenia informacji o typie, rozwiń węzeł odwołuje się do w węźle Eksploratora rozwiązań , a następnie wybierz Microsoft.Office.Interop.Excel lub Microsoft.Office.Interop.Word.

  3. Jeśli nie widzisz właściwości naciśnij klawisze F4.

  4. Znajdź osadzić typy usługę Międzyoperacyjną na liście właściwości i zmień jego wartość na False.Ekwiwalentnie, można utworzyć przy użyciu /odniesienia opcję kompilatora zamiast /link w wierszu polecenia.

Aby dodać dodatkowe formatowanie do tabeli

  1. Zastąp dwóch wywołania metody AutoFit w DisplayInExcel z następującą instrukcję.

    // Call to AutoFormat in Visual C# 2010.
    workSheet.Range["A1", "B3"].AutoFormat(
        Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
    

    Autoformatowanie metoda ma siedmiu wartości parametrów, które są opcjonalne.Nazwany i opcjonalny argument umożliwiają stosowanie argumentów dla none, niektóre lub wszystkie z nich.W poprzednim instrukcji argument jest dostarczana tylko dla jednego z parametrów, Format.Ponieważ Format jest pierwszym parametrem na liście parametrów, nie trzeba podać nazwę parametru.Instrukcja może być jednak łatwiej zrozumieć, jeśli nazwa parametru są uwzględniane, jak pokazano w następującym kodzie.

    // Call to AutoFormat in Visual C# 2010.
    workSheet.Range["A1", "B3"].AutoFormat(Format:
        Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic2);
    
  2. Naciśnij klawisze CTRL + F5, aby wyświetlić wynik.W innych formatach są wyświetlane w XlRangeAutoFormat wyliczenia.

  3. Porównaj instrukcji w kroku 1 z następujący kod, który pokazuje argumentów, które są wymagane w Visual C# 2008 i wcześniejszych.

    // The AutoFormat method has seven optional value parameters. The 
    // following call specifies a value for the first parameter, and uses  
    // the default values for the other six.  
    
    // Call to AutoFormat in Visual C# 2008. This code is not part of the 
    // current solution.
    excelApp.get_Range("A1", "B4").AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormatTable3, 
        Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
        Type.Missing);
    

Przykład

Poniższy kod pokazuje pełny przykład.

using System;
using System.Collections.Generic;
using System.Linq;
using Excel = Microsoft.Office.Interop.Excel;
using Word = Microsoft.Office.Interop.Word;


namespace OfficeProgramminWalkthruComplete
{
    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 praticular 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# 2010. 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# 2010 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; }
    }
}

Zobacz też

Zadania

Porady: użycie argumentów nazwanych i opcjonalnych w programowaniu Office (Przewodnik programowania w języku C#)

Informacje

dynamic (odwołanie w C#)

Type.Missing

Koncepcje

Argumenty nazwane i opcjonalne (Przewodnik programowania w języku C#)

Inne zasoby

Używanie typu dynamicznego (Przewodnik programowania w języku C#)