Bagikan melalui


Cara mengakses objek interop Office

C# memiliki fitur yang menyederhanakan akses ke objek Office API. Fitur baru termasuk argumen bernama dan opsional, jenis baru yang disebut dynamic, dan kemampuan untuk meneruskan argumen ke parameter referensi dalam metode COM seolah-olah itu adalah parameter nilai.

Dalam artikel ini, Anda menggunakan fitur baru untuk menulis kode yang membuat dan menampilkan lembar kerja Microsoft Office Excel. Anda menulis kode untuk menambahkan dokumen Office Word yang berisi ikon yang ditautkan ke lembar kerja Excel.

Untuk menyelesaikan panduan ini, Anda harus menginstal Microsoft Office Excel 2007 dan Microsoft Office Word 2007, atau versi yang lebih baru di komputer Anda.

Catatan

Komputer Anda mungkin memperlihatkan nama atau lokasi yang berbeda untuk beberapa elemen antarmuka pengguna Visual Studio dalam petunjuk berikut. Edisi Visual Studio yang Anda miliki dan setelan yang Anda gunakan menentukan elemen-elemen ini. Untuk informasi selengkapnya, lihat Mempersonalisasi IDE.

Penting

VSTO (Visual Studio Tools for Office) bergantung pada .NET Framework. Add-in COM juga dapat ditulis dengan .NET Framework. Add-in Office tidak dapat dibuat dengan .NET Core dan .NET 5+, versi terbaru .NET. Ini karena .NET Core/.NET 5+ tidak dapat bekerja sama dengan .NET Framework dalam proses yang sama dan dapat menyebabkan kegagalan beban add-in. Anda dapat terus menggunakan .NET Framework untuk menulis add-in VSTO dan COM untuk Office. Microsoft tidak akan memperbarui vsto atau platform add-in COM untuk menggunakan .NET Core atau .NET 5+. Anda dapat memanfaatkan .NET Core dan .NET 5+, termasuk ASP.NET Core, untuk membuat sisi server Add-in Web Office.

Untuk membuat aplikasi konsol baru

  1. Mulai Visual Studio.
  2. Pada menu File, arahkan ke Baru, lalu pilih Proyek. Kotak dialog Proyek Baru muncul.
  3. Di panel Templat terinstal , perluas C#, lalu pilih Windows.
  4. Lihat bagian atas kotak dialog Proyek Baru untuk memastikan untuk memilih .NET Framework 4 (atau versi yang lebih baru) sebagai kerangka kerja target.
  5. Di panel Templat, pilih Aplikasi Konsol.
  6. Ketik nama untuk proyek Anda di bidang Nama.
  7. Pilih OK.

Proyek baru muncul di Penjelajah Solusi.

Untuk menambahkan referensi

  1. Di Penjelajah Solusi, klik kanan nama proyek Anda lalu pilih Tambahkan Referensi. Kotak dialog Tambahkan Referensi muncul.
  2. Pada halaman Rakitan, pilih Microsoft.Office.Interop.Word di daftar Nama Komponen, lalu tahan tombol CTRL dan pilih Microsoft.Office.Interop.Excel. Jika Anda tidak melihat rakitan, Anda mungkin perlu menginstalnya. Lihat Cara: Memasang Rakitan Interop Utama Office.
  3. Pilih OK.

Untuk menambahkan hal yang diperlukan menggunakan arahan

Di Penjelajah Solusi, klik kanan file Program.cs lalu pilih Tampilkan Kode. Tambahkan arahan using berikut ke bagian atas file kode:

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

Untuk membuat daftar rekening bank

Tempel definisi kelas berikut ke dalam Program.cs, pada bagian kelas Program.

public class Account
{
    public int ID { get; set; }
    public double Balance { get; set; }
}

Tambahkan kode berikut ke metode Main untuk membuat daftar bankAccounts yang berisi dua akun.

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

Untuk mendeklarasikan metode yang mengekspor informasi akun ke Excel

  1. Tambahkan metode berikut ke kelas Program untuk menyiapkan lembar kerja Excel. Metode Add memiliki parameter opsional untuk menentukan template tertentu. Parameter opsional memungkinkan Anda menghilangkan argumen untuk parameter tersebut jika Anda ingin menggunakan nilai default parameter. Karena Anda tidak menyediakan argumen, Add menggunakan templat default dan membuat buku kerja baru. Pernyataan yang setara dalam versi C# sebelumnya memerlukan argumen tempat penampung: 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 particular 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;
}

Tambahkan kode berikut di akhir DisplayInExcel. Kode memasukkan nilai ke dalam dua kolom pertama dari baris pertama lembar kerja.

// Establish column headings in cells A1 and B1.
workSheet.Cells[1, "A"] = "ID Number";
workSheet.Cells[1, "B"] = "Current Balance";

Tambahkan kode berikut di akhir DisplayInExcel. Perulangan foreach menempatkan informasi dari daftar akun ke dalam dua kolom pertama dari baris-baris lembar kerja yang berurutan.


var row = 1;
foreach (var acct in accounts)
{
    row++;
    workSheet.Cells[row, "A"] = acct.ID;
    workSheet.Cells[row, "B"] = acct.Balance;
}

Tambahkan kode berikut di akhir DisplayInExcel untuk menyesuaikan lebar kolom agar sesuai dengan konten.

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

Versi C# sebelumnya memerlukan transmisi eksplisit untuk operasi ini karena ExcelApp.Columns[1] mengembalikan Object, dan AutoFit adalah metode Range Excel. Baris berikut menunjukkan transmisi.

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

C# mengonversi yang dikembalikan Object ke secara otomatis jika rakitan direferensikan oleh opsi pengkompilasi EmbedInteropTypes atau, setara, jika properti Tipe Interop Semat Excel dynamic benar. True adalah nilai default untuk properti ini.

Untuk menjalankan proyek

Tambahkan baris berikut di akhir Main.

// Display the list in an Excel spreadsheet.
DisplayInExcel(bankAccounts);

Tekan CTRL+F5. Lembar kerja Excel muncul yang berisi data dari dua akun.

Untuk menambahkan dokumen Word

Kode berikut membuka aplikasi Word dan membuat ikon yang menautkan ke lembar kerja Excel. Tempel metode CreateIconInWordDoc, yang disediakan nanti dalam langkah ini, ke dalam kelas Program. CreateIconInWordDoc menggunakan argumen bernama dan opsional untuk mengurangi kerumitan panggilan metode ke Add dan PasteSpecial. Panggilan ini menggabungkan dua fitur lain yang menyederhanakan panggilan ke metode COM yang memiliki parameter referensi. Pertama, Anda dapat mengirim argumen ke parameter referensi seolah-olah itu adalah parameter nilai. Artinya, Anda dapat mengirim nilai secara langsung, tanpa membuat variabel untuk setiap parameter referensi. Kompilator menghasilkan variabel sementara untuk menyimpan nilai argumen, dan membuang variabel saat Anda kembali dari panggilan. Kedua, Anda dapat menghilangkan kata kunci ref dalam daftar argumen.

Metode Add memiliki empat parameter referensi, yang semuanya opsional. Anda dapat menghilangkan argumen untuk salah satu atau semua parameter jika Anda ingin menggunakan nilai defaultnya.

Metode PasteSpecial menyisipkan konten Clipboard. Metode ini memiliki tujuh parameter referensi, yang semuanya opsional. Kode berikut menetapkan argumen untuk dua di antaranya: Link, untuk membuat link ke sumber konten Clipboard, dan DisplayAsIcon, untuk menampilkan link sebagai ikon. Anda dapat menggunakan argumen bernama untuk dua argumen tersebut dan menghilangkan argumen lainnya. Meskipun argumen ini adalah parameter referensi, Anda tidak perlu menggunakan ref kata kunci, atau untuk membuat variabel untuk dikirim sebagai argumen. Anda dapat mengirim nilai secara langsung.

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

Tambahkan pernyataan berikut di akhir Main.

// Create a Word document that contains an icon that links to
// the spreadsheet.
CreateIconInWordDoc();

Tambahkan pernyataan berikut di akhir DisplayInExcel. Metode Copy menambahkan lembar kerja ke Clipboard.

// 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();

Tekan CTRL+F5. Dokumen Word muncul yang berisi ikon. Klik dua kali ikon untuk membawa lembar kerja ke latar depan.

Untuk mengatur properti Sematkan Jenis Interop

Lebih banyak peningkatan dimungkinkan ketika Anda memanggil jenis COM yang tidak memerlukan perakitan interop utama (PIA) pada waktu proses. Menghapus dependensi pada PIA menghasilkan independensi versi dan penyebaran yang lebih mudah. Untuk informasi selengkapnya tentang keuntungan pemrograman tanpa PIA, lihat Panduan: Menyematkan Jenis dari Rakitan Terkelola.

Selain itu, pemrograman lebih mudah karena dynamic jenis mewakili jenis yang diperlukan dan dikembalikan yang dideklarasikan dalam metode COM. Variabel yang memiliki jenis dynamic tidak dievaluasi hingga run time, yang menghilangkan kebutuhan akan transmisi eksplisit. Untuk informasi selengkapnya, lihat Menggunakan Jenis dinamis.

Menyematkan informasi jenis alih-alih menggunakan PIA adalah perilaku default. Karena default tersebut, beberapa contoh sebelumnya disederhanakan. Anda tidak memerlukan transmisi eksplisit. Misalnya, deklarasi worksheet dalam DisplayInExcel ditulis sebagai Excel._Worksheet workSheet = excelApp.ActiveSheet bukan Excel._Worksheet workSheet = (Excel.Worksheet)excelApp.ActiveSheet. Panggilan ke AutoFit dalam metode yang sama juga memerlukan transmisi eksplisit tanpa default, karena ExcelApp.Columns[1] mengembalikan Object, dan AutoFit adalah metode Excel. Kode berikut menunjukkan transmisi.

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

Untuk mengubah default dan menggunakan PIA alih-alih menyematkan informasi tipe, perluas simpul Referensi di Penjelajah Solusi, lalu pilih Microsoft.Office.Interop.Excel atau Microsoft.Office.Interop.Word. Jika Anda tidak dapat melihat jendela Properti, tekan F4. Temukan Sematkan Jenis Interop dalam daftar properti, dan ubah nilainya menjadi False. Demikian pula, Anda dapat mengompilasi dengan menggunakan opsi kompilator Referensi sebagai ganti dari EmbedInteropTypes pada perintah.

Untuk menambahkan pemformatan tambahan ke tabel

Ganti dua panggilan ke AutoFit di DisplayInExcel dengan pernyataan berikut.

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

Metode AutoFormat memiliki tujuh parameter nilai, yang semuanya opsional. Argumen bernama dan opsional memungkinkan Anda memberikan argumen untuk tidak ada, sebagian, atau semuanya. Dalam pernyataan sebelumnya, Anda hanya menyediakan argumen untuk salah satu parameter, Format. Karena Format adalah parameter pertama dalam daftar parameter, Anda tidak perlu memberikan nama parameter. Namun, pernyataan mungkin lebih mudah dipahami jika Anda menyertakan nama parameter, seperti yang ditunjukkan dalam kode berikut.

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

Tekan CTRL+F5 untuk melihat hasilnya. Anda dapat menemukan format lain dalam yang tercantum dalam XlRangeAutoFormat enumerasi.

Contoh

Kode berikut menunjukkan contoh lengkapnya.

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

namespace OfficeProgrammingWalkthruComplete
{
    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 particular 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#. 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# 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; }
    }
}

Lihat juga