Bagaimana untuk mentransfer data ke buku kerja Excel dengan menggunakan Visual C# 2005 atau Visual C#.NET

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 306023 - Melihat produk di mana artikel ini berlaku.
Untuk Microsoft Visual Basic.NET versi artikel ini, lihat 306022.
Untuk versi Microsoft Visual Basic 6.0 artikel ini, lihat 247412.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini selangkah demi selangkah menjelaskan beberapa metode untuk mentransfer data ke Microsoft Excel 2002 dari Microsoft Visual C# 2005 atau Microsoft Visual C#.Program yang bersih. Artikel ini juga menyajikan kelebihan dan kekurangan masing-masing metode sehingga Anda dapat memilih solusi yang terbaik untuk situasi Anda.

Sekilas pandang

Teknik yang paling sering digunakan untuk mentransfer data ke buku kerja Excel Otomatisasi. Dengan otomatisasi, Anda dapat memanggil metode dan properti yang khusus untuk tugas-tugas Excel. Otomatisasi memberikan fleksibilitas terbesar untuk menentukan lokasi data Anda dalam buku kerja, format buku kerja, dan membuat berbagai pengaturan pada saat run-time.

Dengan otomatisasi, Anda dapat menggunakan beberapa teknik untuk mentransfer data Anda:
  • Mentransfer data sel oleh sel.
  • Mentransfer data dalam array untuk kisaran sel.
  • Transfer data dalam recordset ADO ke kisaran sel dengan menggunakan CopyFromRecordset metode.
  • Membuat QueryTable objek pada lembar kerja Excel yang berisi hasil query pada sumber data ODBC atau OLEDB.
  • Mentransfer data ke clipboard, dan kemudian paste isi clipboard ke lembar kerja Excel.
Anda juga dapat menggunakan beberapa metode yang tidak selalu memerlukan otomatisasi untuk mentransfer data ke Excel. Jika Anda menjalankan program sisi server, ini bisa menjadi pendekatan yang baik untuk mengambil sebagian besar pengolahan data dari klien Anda.

Untuk mentransfer data tanpa otomatisasi, Anda dapat menggunakan pendekatan yang berikut:
  • Transfer data Anda ke file teks tab-delimited atau berpembatas koma yang Excel dapat kemudian mengurai menjadi sel-sel pada lembar kerja.
  • Mentransfer data ke lembar kerja dengan menggunakan ADO.NET.
  • Transfer XML data ke Excel (versi 2002 dan 2003) untuk menyediakan data yang diformat dan diatur ke dalam baris dan kolom.
Artikel ini menyediakan diskusi dan contoh kode untuk masing-masing teknik ini. The Membuat sampel lengkap Visual C# 2005 atau Visual C#.NET proyek bagian, nanti dalam artikel ini, menunjukkan cara membuat Visual C#.NET program yang dijalankan setiap teknik.

Teknik

Menggunakan otomatisasi untuk mentransfer Data sel oleh sel

Dengan otomatisasi, Anda dapat mentransfer data ke lembar kerja satu sel pada suatu waktu:
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));

// Add data to cells in the first worksheet in the new workbook.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objRange.Value = "Last Name";
m_objRange = m_objSheet.get_Range("B1", m_objOpt);
m_objRange.Value = "First Name";
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange.Value = "Doe";
m_objRange = m_objSheet.get_Range("B2", m_objOpt);
m_objRange.Value = "John";

// Apply bold to cells A1:B1.
m_objRange = m_objSheet.get_Range("A1", "B1");
m_objFont = m_objRange.Font;
m_objFont.Bold=true;

// Save the Workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt, 
	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
	m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
				
Mentransfer data sel oleh sel adalah pendekatan yang dapat diterima jika Anda memiliki sejumlah kecil data. Anda memiliki fleksibilitas untuk meletakkan data di mana saja di buku kerja dan Anda dapat memformat sel kondisional pada saat run-time. Namun, bukan tidak sebaiknya gunakan pendekatan ini jika Anda memiliki sejumlah besar data transfer ke buku kerja Excel. Setiap Kisaran objek yang Anda peroleh di run-time hasil dalam permintaan antarmuka yang berarti data transfer lebih lambat. Selain itu, Microsoft Windows 95, Microsoft Windows 98, dan Microsoft Windows Millennium Edition (Me) memiliki batasan 64 Kilobita (KB) di antarmuka permintaan. Jika Anda memiliki lebih dari 64 KB antarmuka permintaan, server Otomatisasi (Excel) mungkin akan berhenti merespons, atau Anda mungkin menerima pesan galat yang menunjukkan memori rendah.Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
216400 PRB: Cross COM Otomasi dapat menggantung aplikasi klien pada Win95/98
Sekali lagi, mentransfer data sel oleh sel diperbolehkan hanya untuk jumlah kecil data. Jika Anda harus mentransfer besar set data ke Excel, pertimbangkan untuk menggunakan salah satu pendekatan-pendekatan lain yang dibahas dalam artikel ini untuk mentransfer data dalam jumlah besar.

Untuk informasi tambahan, dan untuk contoh mengotomatisasi Excel dengan Visual C#.NET, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
302084 HOWTO: Mengotomatisasi Microsoft Excel dari Microsoft Visual C#.NET

Menggunakan otomatisasi untuk mentransfer sebuah Array data ke berbagai pada lembar kerja

Anda dapat mentransfer array data untuk berbagai banyak sel pada suatu waktu:
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));

// Create an array for the headers and add it to cells A1:C1.
object[] objHeaders = {"Order ID", "Amount", "Tax"};
m_objRange = m_objSheet.get_Range("A1", "C1");
m_objRange.Value = objHeaders;
m_objFont = m_objRange.Font;
m_objFont.Bold=true;

// Create an array with 3 columns and 100 rows and add it to
// the worksheet starting at cell A2.
object[,] objData = new Object[100,3];
Random rdm = new Random((int)DateTime.Now.Ticks);
double nOrderAmt, nTax;
for(int r=0;r<100;r++)
{
	objData[r,0] = "ORD" + r.ToString("0000");
	nOrderAmt = rdm.Next(1000);
	objData[r,1] = nOrderAmt.ToString("c");
	nTax = nOrderAmt*0.07;
	objData[r,2] = nTax.ToString("c");
}
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange = m_objRange.get_Resize(100,3);
m_objRange.Value = objData;

// Save the Workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book2.xls", m_objOpt, m_objOpt, 
	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
	m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
				
Jika Anda mentransfer data dengan menggunakan sebuah array bukan sel oleh sel, Anda dapat menyadari keuntungan kinerja yang luar biasa dengan data dalam jumlah besar. Pertimbangkan baris berikut dari kode tersebut yang mentransfer data untuk 300 sel pada lembar kerja:
objRange = objSheet.get_Range("A2", m_objOpt);
objRange = objRange.get_Resize(100,3);
objRange.Value = objData;
				
Kode ini mewakili dua antarmuka permintaan: satu untuk Kisaran objek yang Kisaran metode kembali, dan satu lagi untuk Kisaran objek yang Mengubah ukuran metode kembali. Sebaliknya, mentransfer data sel oleh sel memerlukan permintaan untuk 300 antarmuka untuk Kisaran objek. Bila mungkin, Anda dapat memperoleh manfaat dari mentransfer data dalam jumlah besar dan mengurangi jumlah permintaan antarmuka yang Anda buat.

Untuk informasi tambahan tentang penggunaan array untuk mendapatkan dan menetapkan nilai-nilai dalam rentang dengan Excel otomatisasi, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
302096 HOWTO: Mengotomatisasi Excel dengan Visual C#.BERSIH untuk mengisi atau memperoleh Data dalam berbagai menggunakan array

Menggunakan otomatisasi untuk mentransfer ADO Recordset ke berbagai lembar kerja

Objek model untuk Excel 2000, Excel 2002 dan Excel 2003 CopyFromRecordset metode untuk mentransfer ADO recordset ke berbagai pada lembar kerja. Kode berikut menggambarkan cara untuk mengotomatisasi Excel untuk mentransfer isi pesanan tabel dalam database contoh Northwind dengan menggunakan CopyFromRecordset metode:
// Create a Recordset from all the records in the Orders table.
ADODB.Connection objConn = new ADODB.Connection();
ADODB._Recordset objRS = null;
objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
	m_strNorthwind + ";", "", "", 0);
objConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
object objRecAff;
objRS = (ADODB._Recordset)objConn.Execute("Orders", out objRecAff, 
	(int)ADODB.CommandTypeEnum.adCmdTable);

// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));

// Get the Fields collection from the recordset and determine
// the number of fields (or columns).
System.Collections.IEnumerator objFields = objRS.Fields.GetEnumerator();
int nFields = objRS.Fields.Count;

// Create an array for the headers and add it to the
// worksheet starting at cell A1.
object[] objHeaders = new object[nFields];
ADODB.Field objField = null;
for(int n=0;n<nFields;n++)
{
	objFields.MoveNext();
	objField = (ADODB.Field)objFields.Current;
	objHeaders[n] = objField.Name;
}
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objRange = m_objRange.get_Resize(1, nFields);
m_objRange.Value = objHeaders;
m_objFont = m_objRange.Font;
m_objFont.Bold=true;

// Transfer the recordset to the worksheet starting at cell A2.
m_objRange = m_objSheet.get_Range("A2", m_objOpt);
m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);

// Save the Workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book3.xls", m_objOpt, m_objOpt, 
	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
	m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();

// Close the recordset and connection.
objRS.Close();
objConn.Close();
				
Catatan CopyFromRecordset bekerja hanya dengan ADO Recordset objek. Anda tidak dapat menggunakan DataSet bahwa Anda buat dengan menggunakan ADO.BERSIH dengan CopyFromRecordset metode. Beberapa contoh di bagian-bagian yang mengikuti menunjukkan bagaimana untuk mentransfer data ke Excel dengan ADO.NET.

Menggunakan otomatisasi untuk membuat QueryTable objek pada lembar kerja

A QueryTable objek mewakili meja yang dibangun dari data yang dikembalikan dari sumber data eksternal. Ketika Anda mengotomatisasi Excel, Anda dapat membuat QueryTable dengan menyediakan serangkaian sambungan ke OLE DB atau sumber data ODBC dan SQL string. Excel menghasilkan recordset dan menyisipkan recordset ke lembar kerja di lokasi yang Anda tentukan. QueryTable objek menawarkan keuntungan sebagai berikut atas CopyFromRecordset metode:
  • Excel menangani penciptaan recordset dan penempatan pada lembar kerja.
  • Anda dapat menyimpan permintaan dengan QueryTable objek dan menyegarkan kemudian untuk mendapatkan recordset diperbarui.
  • Ketika baru QueryTable ditambahkan ke lembar kerja Anda, Anda dapat menentukan bahwa data yang sudah ada dalam sel pada lembar kerja menjadi bergeser untuk menangani data baru (untuk informasi lebih lanjut, lihat RefreshStyle properti).
Kode berikut menunjukkan cara untuk mengotomatisasi Excel 2000, Excel 2002, atau Excel 2003 untuk membuat yang baru QueryTable dalam lembar kerja Excel dengan menggunakan data dari database contoh Northwind:
// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));

// Create a QueryTable that starts at cell A1.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objQryTables = m_objSheet.QueryTables;
m_objQryTable = (Excel._QueryTable)m_objQryTables.Add(
	"OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
	m_strNorthwind + ";", m_objRange, "Select * From Orders");
m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;
m_objQryTable.Refresh(false);

// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book4.xls", m_objOpt, m_objOpt, 
	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
	m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
				

Menggunakan jendela Clipboard

Anda dapat menggunakan jendela Clipboard untuk mentransfer data ke lembar kerja. Untuk menyisipkan data ke beberapa sel pada lembar kerja, Anda dapat menyalin string yang kolom yang dibatasi oleh karakter TAB, dan baris yang dibatasi oleh kereta kembali. Kode berikut menggambarkan bagaimana Visual C#.NET dapat menggunakan jendela Clipboard untuk mentransfer data ke Excel:
// Copy a string to the Windows clipboard.
string sData = "FirstName\tLastName\tBirthdate\r\n"  +
	"Bill\tBrown\t2/5/85\r\n"  +
	"Joe\tThomas\t1/1/91";
System.Windows.Forms.Clipboard.SetDataObject(sData);

// Start a new workbook in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));

// Paste the data starting at cell A1.
m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
m_objRange = m_objSheet.get_Range("A1", m_objOpt);
m_objSheet.Paste(m_objRange, false);

// Save the workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book5.xls", m_objOpt, m_objOpt, 
	m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
	m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
				

Membuat Delimited File teks yang Excel dapat mengurai menjadi baris dan kolom

Excel dapat membuka tab atau koma-delimited file dan benar mem-parsing data ke dalam sel. Anda dapat menggunakan fitur ini bila Anda ingin mentransfer data dalam jumlah besar ke lembar kerja sementara menggunakan sedikit, jika ada, otomatisasi. Ini mungkin merupakan pendekatan yang baik untuk program klien-server karena file teks dapat dihasilkan sisi server. Anda kemudian dapat membuka file teks pada klien, menggunakan otomatisasi di tempat tepat.

Kode berikut menggambarkan cara menghasilkan file tab-delimited teks dari data yang dibaca dengan ADO.NET:
// Connect to the data source.
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection( 
	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strNorthwind + ";");
objConn.Open();

// Execute a command to retrieve all records from the Employees table.
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand( 
	"Select * From Employees", objConn);
System.Data.OleDb.OleDbDataReader objReader;
objReader = objCmd.ExecuteReader();

// Create the FileStream and StreamWriter object to write 
// the recordset contents to file.
System.IO.FileStream fs = new System.IO.FileStream(
	m_strSampleFolder + "Book6.txt", System.IO.FileMode.Create);
System.IO.StreamWriter sw = new System.IO.StreamWriter(
	fs, System.Text.Encoding.Unicode);

// Write the field names (headers) as the first line in the text file.
sw.WriteLine(objReader.GetName(0) +  "\t" + objReader.GetName(1) +
	"\t" + objReader.GetName(2) + "\t" + objReader.GetName(3) +
	"\t" + objReader.GetName(4) + "\t" + objReader.GetName(5));

// Write the first six columns in the recordset to a text file as
// tab-delimited.
while(objReader.Read()) 
{
	for(int i=0;i<=5;i++)
	{
		if(!objReader.IsDBNull(i))
		{
			string s;
			s = objReader.GetDataTypeName(i);
			if(objReader.GetDataTypeName(i)=="DBTYPE_I4")
			{
				sw.Write(objReader.GetInt32(i).ToString());
			}
			else if(objReader.GetDataTypeName(i)=="DBTYPE_DATE")
			{
				sw.Write(objReader.GetDateTime(i).ToString("d"));
			}
			else if (objReader.GetDataTypeName(i)=="DBTYPE_WVARCHAR")
			{
				sw.Write(objReader.GetString(i));
			}
		}
		if(i<5) sw.Write("\t");
	}
	sw.WriteLine(); 
}
sw.Flush();	// Write the buffered data to the filestream.

// Close the FileStream.
fs.Close();

// Close the reader and the connection.
objReader.Close();
objConn.Close(); 
				
Kode tersebut menggunakan otomatisasi tidak. Namun, jika Anda ingin, Anda dapat menggunakan otomatisasi untuk membuka file teks dan menyimpan file dalam format buku kerja Excel, seperti ini:
// Open the text file in Excel.
m_objExcel = new Excel.Application();
m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
m_objBooks.OpenText(m_strSampleFolder + "Book6.txt", Excel.XlPlatform.xlWindows, 1, 
	Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
	false, true, false, false, false, false, m_objOpt, m_objOpt, 
	m_objOpt, m_objOpt, m_objOpt);

m_objBook = m_objExcel.ActiveWorkbook;

// Save the text file in the typical workbook format and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book6.xls", Excel.XlFileFormat.xlWorkbookNormal, 
	m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
	m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();
				

Mentransfer Data ke lembar kerja dengan menggunakan ADO.NET

Anda dapat menggunakan Microsoft Jet OLE DB penyedia untuk menambahkan catatan ke meja di buku kerja Excel yang ada. A Tabel dalam Excel adalah hanya kisaran sel; kisaran mungkin memiliki nama yang ditetapkan. Biasanya, baris pertama dari kisaran berisi header (atau nama field), dan kemudian semua baris dalam kisaran berisi catatan.

Kode berikut menambahkan dua catatan baru ke tabel di Book7.xls. Tabel dalam kasus ini adalah Sheet1:
// Establish a connection to the data source.
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(
	"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strSampleFolder +
	"Book7.xls;Extended Properties=Excel 8.0;");
objConn.Open();

// Add two records to the table named 'MyTable'.
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
	" values ('Bill', 'Brown')";
objCmd.ExecuteNonQuery();
objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
	" values ('Joe', 'Thomas')";
objCmd.ExecuteNonQuery();

// Close the connection.
objConn.Close();
				
Ketika Anda menambahkan catatan dengan ADO.NET seperti ditunjukkan pada contoh ini, format di buku kerja yang dikelola. Setiap catatan yang ditambahkan ke baris meminjam format dari baris sebelum itu.

Untuk informasi tambahan tentang menggunakan ADO.NET, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
306636 CARA: Koneksi ke Database dan menjalankan perintah dengan menggunakan ADO.NET dan Visual C#.NET
314145 CARA: Mengisi DataSet objek dari Database dengan menggunakan Visual C#.NET
307587 CARA: Update Database dari objek DataSet dengan menggunakan Visual C#.NET
Untuk informasi tambahan tentang menggunakan penyedia Jet OLEDB dengan sumber data Excel, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
316934 CARA: Menggunakan ADO.NET untuk mengambil dan memodifikasi catatan di buku kerja Excel dengan Visual Basic.NET
278973 CONTOH: ExcelADO menunjukkan bagaimana menggunakan ADO untuk membaca dan menulis Data dalam Excel Workbook
257819 HOWTO: Menggunakan ADO dengan Data Excel dari Visual Basic atau VBA

Mentransfer Data XML (Excel 2002 dan Excel 2003)

Excel 2002 dan 2003 dapat membuka file XML yang well-formed. Anda dapat membuka file XML secara langsung dengan menggunakan Terbuka perintah pada Berkas menu, atau pemrograman dengan menggunakan baik Terbuka atau OpenXML metode Buku kerja Koleksi. Jika Anda membuat file XML untuk digunakan di Excel, Anda juga dapat membuat style sheet untuk memformat data.

Untuk informasi tambahan tentang menggunakan XML dengan Excel 2002, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
307029 CARA: Transfer Data XML untuk Microsoft Excel 2002 dengan menggunakan Visual C#.NET
288215 INFO: Microsoft Excel 2002 dan XML

Membuat sampel lengkap Visual C#.NET proyek

  1. Membuat folder baru bernama C:\ExcelData. Contoh program akan menyimpan buku kerja Excel dalam folder ini.
  2. Buat buku kerja baru untuk sampel untuk menulis ke:
    1. Mulai buku kerja baru di Excel.
    2. Pada Sheet1 dari buku kerja baru, ketik Nama depan dalam sel A1 dan Nama belakang dalam sel B1.
    3. Pilih A1:B1.
    4. Pada Masukkan menu, titik Nama, lalu klik Menentukan. Ketik nama MyTable kemudian klik Oke.
    5. Simpan buku kerja sebagai C:\Exceldata\Book7.xls.
    6. Keluar Excel.
  3. Mulai Microsoft Visual Studio 2005 atau Microsoft Visual Studio.NET. Pada Berkas menu, titik Baru, lalu klik Project. Di bawah Visual C# proyek atau Visual C#, pilih Aplikasi Windows. Secara default, Form1 dibuat.
  4. Menambahkan referensi ke perpustakaan objek Excel dan Majelis interop utama ADODB. Untuk melakukannya, ikuti langkah-langkah berikut:
    1. Pada Project menu, klik Menambahkan referensi.
    2. Pada NET tab, Cari ADODB, lalu klik Pilih.

      Catatan Pada Visual Studio 2005, Anda tidak perlu klik Pilih.
    3. Pada COM tab, Cari Perpustakaan objek Microsoft Excel 10,0 atau perpustakaan objek Microsoft Excel 11,0, lalu klik Pilih.

      Catatan Pada Visual Studio 2005, Anda tidak perlu klik Pilih.

      Catatan Jika Anda menggunakan Microsoft Excel 2002 dan Anda tidak sudah melakukannya, Microsoft menganjurkan Anda untuk men-download dan kemudian menginstal Microsoft Office XP utama Interop Majelis (PIAs). Untuk informasi lebih lanjut tentang Office XP PIAs, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
      328912INFO: Microsoft Office XP PIAs tersedia untuk di-Download
    4. Dalam Menambahkan referensi kotak dialog, klik Oke untuk menerima pilihan Anda.
  5. Tambahkan Combo Box kontrol dan Tombol mengontrol Form1.
  6. Tambahkan event handler untuk formulir Beban acara dan Klik peristiwa kontrol tombol:
    1. Dalam design view untuk Form1.cs, klik dua kali Form1.

      Handler untuk formulir Beban acara ini dibuat dan muncul di Form1.cs.
    2. Pada Lihat menu, klik Perancang untuk beralih ke tampilan desain.
    3. Klik dua kali Button1.

      Handler untuk tombol Klik acara ini dibuat dan muncul di Form1.cs.
  7. Dalam Form1.cs, mengganti kode berikut:
    private void Form1_Load(object sender, System.EventArgs e)
    {
    
    }
    
    private void button1_Click(object sender, System.EventArgs e)
    {
    
    }
    					
    dengan:
            // Excel object references.
            private Excel.Application m_objExcel =  null;
            private Excel.Workbooks m_objBooks = null;
            private Excel._Workbook m_objBook = null;
            private Excel.Sheets m_objSheets = null;
            private Excel._Worksheet m_objSheet = null;
            private Excel.Range m_objRange =  null;
            private Excel.Font m_objFont = null;
            private Excel.QueryTables m_objQryTables = null;
            private Excel._QueryTable m_objQryTable = null;
    
            // Frequenty-used variable for optional arguments.
            private object m_objOpt = System.Reflection.Missing.Value;
    
            // Paths used by the sample code for accessing and storing data.
            private object m_strSampleFolder = "C:\\ExcelData\\";
            private string m_strNorthwind = "C:\\Program Files\\Microsoft Office\\Office10\\Samples\\Northwind.mdb";
    
            private void Form1_Load(object sender, System.EventArgs e)
            {			
                comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
    
                comboBox1.Items.AddRange(new object[]{
                                                         "Use Automation to Transfer Data Cell by Cell ", 
                                                         "Use Automation to Transfer an Array of Data to a Range on a Worksheet ", 
                                                         "Use Automation to Transfer an ADO Recordset to a Worksheet Range ", 
                                                         "Use Automation to Create a QueryTable on a Worksheet", 
                                                         "Use the Clipboard", 
                                                         "Create a Delimited Text File that Excel Can Parse into Rows and Columns", 
                                                         "Transfer Data to a Worksheet Using ADO.NET "});
                comboBox1.SelectedIndex = 0;
                button1.Text = "Go!";
            }
    
            private void button1_Click(object sender, System.EventArgs e)
            {
                switch (comboBox1.SelectedIndex)
                {
                    case 0 : Automation_CellByCell(); break;
                    case 1 : Automation_UseArray(); break;
                    case 2 : Automation_ADORecordset(); break;
                    case 3 : Automation_QueryTable(); break;
                    case 4 : Use_Clipboard(); break;
                    case 5 : Create_TextFile(); break;
                    case 6 : Use_ADONET(); break;
                }
    	
                //Clean-up
                m_objFont = null;
                m_objRange = null;
                m_objSheet = null;
                m_objSheets = null;
                m_objBooks = null;
                m_objBook = null;
                m_objExcel = null;
                GC.Collect();
    
            }
    
            private void Automation_CellByCell()
            {
                // Start a new workbook in Excel.
                m_objExcel = new Excel.Application();
                m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
                m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
    
                // Add data to cells of the first worksheet in the new workbook.
                m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
                m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
                m_objRange = m_objSheet.get_Range("A1", m_objOpt);
                m_objRange.set_Value(m_objOpt,"Last Name");
                m_objRange = m_objSheet.get_Range("B1", m_objOpt);
                m_objRange.set_Value(m_objOpt,"First Name");
                m_objRange = m_objSheet.get_Range("A2", m_objOpt);
                m_objRange.set_Value(m_objOpt,"Doe");
                m_objRange = m_objSheet.get_Range("B2", m_objOpt);
                m_objRange.set_Value(m_objOpt,"John");
    
                // Apply bold to cells A1:B1.
                m_objRange = m_objSheet.get_Range("A1", "B1");
                m_objFont = m_objRange.Font;
                m_objFont.Bold=true;
    
                // Save the workbook and quit Excel.
                m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt, 
                    m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
                    m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
                m_objBook.Close(false, m_objOpt, m_objOpt);
                m_objExcel.Quit();
    
            }
    
            private void Automation_UseArray()
            {
                // Start a new workbook in Excel.
                m_objExcel = new Excel.Application();
                m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
                m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
                m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
                m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
    
                // Create an array for the headers and add it to cells A1:C1.
                object[] objHeaders = {"Order ID", "Amount", "Tax"};
                m_objRange = m_objSheet.get_Range("A1", "C1");
                m_objRange.set_Value(m_objOpt,objHeaders);
                m_objFont = m_objRange.Font;
                m_objFont.Bold=true;
    
                // Create an array with 3 columns and 100 rows and add it to
                // the worksheet starting at cell A2.
                object[,] objData = new Object[100,3];
                Random rdm = new Random((int)DateTime.Now.Ticks);
                double nOrderAmt, nTax;
                for(int r=0;r<100;r++)
                {
                    objData[r,0] = "ORD" + r.ToString("0000");
                    nOrderAmt = rdm.Next(1000);
                    objData[r,1] = nOrderAmt.ToString("c");
                    nTax = nOrderAmt*0.07;
                    objData[r,2] = nTax.ToString("c");
                }
                m_objRange = m_objSheet.get_Range("A2", m_objOpt);
                m_objRange = m_objRange.get_Resize(100,3);
                m_objRange.set_Value(m_objOpt,"objData");
                
                // Save the workbook and quit Excel.
                m_objBook.SaveAs(m_strSampleFolder + "Book2.xls", m_objOpt, m_objOpt, 
                    m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
                    m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
                m_objBook.Close(false, m_objOpt, m_objOpt);
                m_objExcel.Quit();
    
            }
    
            private void Automation_ADORecordset()
            {
                // Create a Recordset from all the records in the Orders table.
                ADODB.Connection objConn = new ADODB.Connection();
                ADODB._Recordset objRS = null;
                objConn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
                    m_strNorthwind + ";", "", "", 0);
                objConn.CursorLocation = ADODB.CursorLocationEnum.adUseClient;
                object objRecAff;
                objRS = (ADODB._Recordset)objConn.Execute("Orders", out objRecAff, 
                    (int)ADODB.CommandTypeEnum.adCmdTable);
    
                // Start a new workbook in Excel.
                m_objExcel = new Excel.Application();
                m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
                m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
                m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
                m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
    
                // Get the Fields collection from the recordset and determine
                // the number of fields (or columns).
                System.Collections.IEnumerator objFields = objRS.Fields.GetEnumerator();
                int nFields = objRS.Fields.Count;
    
                // Create an array for the headers and add it to the
                // worksheet starting at cell A1.
                object[] objHeaders = new object[nFields];
                ADODB.Field objField = null;
                for(int n=0;n<nFields;n++)
                {
                    objFields.MoveNext();
                    objField = (ADODB.Field)objFields.Current;
                    objHeaders[n] = objField.Name;
                }
                m_objRange = m_objSheet.get_Range("A1", m_objOpt);
                m_objRange = m_objRange.get_Resize(1, nFields);
                m_objRange.set_Value(m_objOpt,objHeaders);
                m_objFont = m_objRange.Font;
                m_objFont.Bold=true;
    
                // Transfer the recordset to the worksheet starting at cell A2.
                m_objRange = m_objSheet.get_Range("A2", m_objOpt);
                m_objRange.CopyFromRecordset(objRS, m_objOpt, m_objOpt);
    
                // Save the workbook and quit Excel.
                m_objBook.SaveAs(m_strSampleFolder + "Book3.xls", m_objOpt, m_objOpt, 
                    m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
                    m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
                m_objBook.Close(false, m_objOpt, m_objOpt);
                m_objExcel.Quit();
    
                //Close the recordset and connection
                objRS.Close();
                objConn.Close();
    
            }
    
            private void Automation_QueryTable()
            {
                // Start a new workbook in Excel.
                m_objExcel = new Excel.Application();
                m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
                m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
    
                // Create a QueryTable that starts at cell A1.
                m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
                m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
                m_objRange = m_objSheet.get_Range("A1", m_objOpt);
                m_objQryTables = m_objSheet.QueryTables;
                m_objQryTable = (Excel._QueryTable)m_objQryTables.Add(
                    "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
                    m_strNorthwind + ";", m_objRange, "Select * From Orders");
                m_objQryTable.RefreshStyle = Excel.XlCellInsertionMode.xlInsertEntireRows;
                m_objQryTable.Refresh(false);
    
                // Save the workbook and quit Excel.
                m_objBook.SaveAs(m_strSampleFolder + "Book4.xls", m_objOpt, m_objOpt, 
                    m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                    m_objOpt, m_objOpt, m_objOpt);
                m_objBook.Close(false, m_objOpt, m_objOpt);
                m_objExcel.Quit();
    
            }
    
            private void Use_Clipboard()
            {
                // Copy a string to the clipboard.
                string sData = "FirstName\tLastName\tBirthdate\r\n"  +
                    "Bill\tBrown\t2/5/85\r\n"  +
                    "Joe\tThomas\t1/1/91";
                System.Windows.Forms.Clipboard.SetDataObject(sData);
    
                // Start a new workbook in Excel.
                m_objExcel = new Excel.Application();
                m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
                m_objBook = (Excel._Workbook)(m_objBooks.Add(m_objOpt));
    
                // Paste the data starting at cell A1.
                m_objSheets = (Excel.Sheets)m_objBook.Worksheets;
                m_objSheet = (Excel._Worksheet)(m_objSheets.get_Item(1));
                m_objRange = m_objSheet.get_Range("A1", m_objOpt);
                m_objSheet.Paste(m_objRange, false);
    
                // Save the workbook and quit Excel.
                m_objBook.SaveAs(m_strSampleFolder + "Book5.xls", m_objOpt, m_objOpt, 
                    m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                    m_objOpt, m_objOpt, m_objOpt);
                m_objBook.Close(false, m_objOpt, m_objOpt);
                m_objExcel.Quit();
    
            }
    
            private void Create_TextFile()
            {
                // Connect to the data source.
                System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection( 
                    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strNorthwind + ";");
                objConn.Open();
    
                // Execute a command to retrieve all records from the Employees  table.
                System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand( 
                    "Select * From Employees", objConn);
                System.Data.OleDb.OleDbDataReader objReader;
                objReader = objCmd.ExecuteReader();
    
    
                // Create the FileStream and StreamWriter object to write 
                // the recordset contents to file.
                System.IO.FileStream fs = new System.IO.FileStream(
                    m_strSampleFolder + "Book6.txt", System.IO.FileMode.Create);
                System.IO.StreamWriter sw = new System.IO.StreamWriter(
                    fs, System.Text.Encoding.Unicode);
    
                // Write the field names (headers) as the first line in the text file.
                sw.WriteLine(objReader.GetName(0) +  "\t" + objReader.GetName(1) +
                    "\t" + objReader.GetName(2) + "\t" + objReader.GetName(3) +
                    "\t" + objReader.GetName(4) + "\t" + objReader.GetName(5));
    
                // Write the first six columns in the recordset to a text file as
                // tab-delimited.
                while(objReader.Read()) 
                {
                    for(int i=0;i<=5;i++)
                    {
                        if(!objReader.IsDBNull(i))
                        {
                            string s;
                            s = objReader.GetDataTypeName(i);
                            if(objReader.GetDataTypeName(i)=="DBTYPE_I4")
                            {
                                sw.Write(objReader.GetInt32(i).ToString());
                            }
                            else if(objReader.GetDataTypeName(i)=="DBTYPE_DATE")
                            {
                                sw.Write(objReader.GetDateTime(i).ToString("d"));
                            }
                            else if (objReader.GetDataTypeName(i)=="DBTYPE_WVARCHAR")
                            {
                                sw.Write(objReader.GetString(i));
                            }
                        }
                        if(i<5) sw.Write("\t");
                    }
                    sw.WriteLine(); 
                }
                sw.Flush();	// Write the buffered data to the FileStream.
    
                // Close the FileStream.
                fs.Close();
    
                // Close the reader and the connection.
                objReader.Close();
                objConn.Close(); 
    
                // ==================================================================
                // Optionally, automate Excel to open the text file and save it in the
                // Excel workbook format.
    
                // Open the text file in Excel.
                m_objExcel = new Excel.Application();
                m_objBooks = (Excel.Workbooks)m_objExcel.Workbooks;
                m_objBooks.OpenText(m_strSampleFolder + "Book6.txt", Excel.XlPlatform.xlWindows, 1, 
                    Excel.XlTextParsingType.xlDelimited, Excel.XlTextQualifier.xlTextQualifierDoubleQuote,
                    false, true, false, false, false, false, m_objOpt, m_objOpt, 
                    m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
    
                m_objBook = m_objExcel.ActiveWorkbook;
    
                // Save the text file in the typical workbook format and quit Excel.
                m_objBook.SaveAs(m_strSampleFolder + "Book6.xls", Excel.XlFileFormat.xlWorkbookNormal, 
                    m_objOpt, m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, m_objOpt, m_objOpt,
                    m_objOpt, m_objOpt, m_objOpt);
                m_objBook.Close(false, m_objOpt, m_objOpt);
                m_objExcel.Quit();
    
            }
    
            private void Use_ADONET()
            {
                // Establish a connection to the data source.
                System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(
                    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + m_strSampleFolder +
                    "Book7.xls;Extended Properties=Excel 8.0;");
                objConn.Open();
    
                // Add two records to the table named 'MyTable'.
                System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();
                objCmd.Connection = objConn;
                objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
                    " values ('Bill', 'Brown')";
    	
                objCmd.ExecuteNonQuery();
                objCmd.CommandText = "Insert into MyTable (FirstName, LastName)" +
                    " values ('Joe', 'Thomas')";
                objCmd.ExecuteNonQuery();
    
    
                // Close the connection.
                objConn.Close(); 
    
            } 
    
    	}  // End Class
    }// End namespace
    					
    Catatan Anda harus mengubah kode pada Visual Studio 2005. Secara default, Visual C# menambahkan salah satu bentuk proyek ketika Anda membuat proyek Windows Forms. Bentuk nama Form1. Dua file yang mewakili bentuk yang bernama Form1.cs dan Form1.designer.cs. Anda menulis kode dalam Form1.cs. Form1.designer.cs file adalah di mana Windows Forms Designer menulis kode sumber yang mengimplementasikan semua tindakan Anda dilakukan dengan menyeret dan menjatuhkan kontrol dari Toolbox.

    Untuk informasi lebih lanjut tentang Windows bentuk desainer Visual C# 2005, kunjungi Web site Microsoft Developer Network (MSDN) berikut:
    http://msdn2.Microsoft.com/en-us/library/ms173077.aspx
    Catatan Jika Anda tidak menginstal Office folder default (c: program files Microsoft Office), memodifikasi m_strNorthwind konstan dalam sampel kode untuk mencocokkan Anda instalasi jalan untuk Northwind.mdb.
  8. Tambahkan berikut untuk Menggunakan arahan di Form1.cs:
    	using System.Reflection;
    	using System.Runtime.InteropServices;
    	using Excel = Microsoft.Office.Interop.Excel;
    					
  9. Tekan F5 untuk membangun dan menjalankan sampel.

REFERENSI

Untuk informasi selengkapnya, kunjungi situs Web Microsoft berikut ini:
Microsoft Office Development with Visual Studio

Properti

ID Artikel: 306023 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
Kata kunci: 
kbautomation kbhowtomaster kbmt KB306023 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini:306023

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com