Cara mengotomatisasi Excel dari MFC dan Visual C++ 2005 atau Visual C++ .NET isi atau mendapatkan data dalam kisaran yang menggunakan array

PENTING: Artikel ini diterjemahkan oleh perangkat lunak penerjemahan mesin Microsoft, dan mungkin telah diedit oleh Masyarakat Microsoft melalui teknologi CTF dan bukan oleh seorang penerjemah profesional. Microsoft menawarkan baik artikel yang diterjemahkan oleh manusia maupun artikel hasil editan terjemahan oleh mesin/komunitas, sehingga Anda dapat mengakses semua artikel di Sentra Pengetahuan yang kami miliki dalam berbagai bahasa. Namun artikel hasil editan mesin atau bahkan komunitas tidak selalu sempurna. Artikel ini dapat mengandung kesalahan dalam hal kosa kata, sintaksis atau tatabahasa, sangat mirip dengan penutur asing yang membuat kekeliruan ketika berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab atas ketidakakuratan, kesalahan atau kerugian apa pun akibat dari kekeliruan dalam penerjemahan isi atau penggunaannya oleh pelanggan kami. Microsoft juga akan senantiasa memperbarui perangkat lunak penerjemahan mesin dan alat untuk menyempurnakan Editan Hasil Penerjemahan Mesin.

Klik disini untuk melihat versi Inggris dari artikel ini: 308407
Untuk versi Microsoft C# .NET dari artikel ini, lihat 302096.
Untuk versi Microsoft Visual Basic .NET dari artikel ini, lihat 302094.
Catatan Microsoft Visual C++ 2005, Microsoft Visual C++ .NET 2003 dan Microsoft Visual C++ .NET 2002 mendukung model kode terkendali yang disediakan oleh Microsoft .NET Framework dan tidak dikelola model kode Microsoft Windows asli. Informasi di dalam artikel ini hanya berlaku untuk kode Visual C++ tidak dikelola.
Ringkasan
Artikel selangkah demi selangkah ini menunjukkan cara mengotomatisasi Microsoft Excel dari Visual C++ 2005 atau Visual C++ .NET mengisi dan mengambil nilai-nilai dalam rentang sel multi menggunakan array.

Membuat klien Otomasi untuk Excel

Untuk mengisi rentang sel multi tanpa diisi sel satu per satu, Anda dapat mengatur nilai properti objek kisaran array dua-dimensi. Demikian pula, Anda dapat mengambil Dimensi array nilai untuk beberapa sel sekaligus menggunakan nilai properti. Langkah-langkah berikut ini menunjukkan proses ini untuk menetapkan dan mengambil kembali data menggunakan Dimensi array.
  1. Ikuti langkah-langkah di bagian "Membuat klien Otomasi" dari artikel Pangkalan Pengetahuan Microsoft berikut ini untuk membuat klien basicAutomation:
    307473 Cara menggunakan pustaka tipe untuk otomatisasi Office dari Visual C++ .NET
    Di langkah 3, tambahkan tombol tekan kedua dan kotak centang ke bentuk. Mengubah ID tombol tekan IDC_GETVALUES dan judul untuk Mendapatkan nilai. Mengubah ID kotak centang untuk IDC_CHECK dan judul untuk mengisi dengan string.

    Pada langkah 4 dari artikel, pilih "10.0 pustaka objek Microsoft Excel" apabila Anda sedang mengotomatisasi Excel 2002 dari Office XP. lokasi asali untuk Excel 2002 adalah C:\Program Files\Microsoft Office\Office10\Excel.exe. Atau, pilih "11.0 pustaka objek Microsoft Excel" apabila Anda sedang mengotomatisasi Microsoft Office Excel 2003. lokasi asali untuk Excel 2003 adalah C:\Program Files\Microsoft Office\Office11\Excel.exe. Pilih antarmuka Microsoft Excel berikut ini:
    • _Application
    • _Workbook
    • _Worksheet
    • Kisaran
    • Buku kerja
    • Lembar kerja
    Pada langkah 6, tambahkan #include pernyataan berikut ini secara langsung setelah petunjuk #pragma sekali dalam Autoprojectdlg.h:
    #include "CApplication.h"#include "CRange.h"#include "CWorkbook.h"#include "CWorkbooks.h"#include "CWorksheet.h"#include "CWorksheets.h"					
  2. Tambahkan berikut ini dua anggota umum variabel kelas CAutoProjectDlg :
    CApplication oExcel;CWorkbook oBook;					
  3. Di kotak dialog, klik kanan-atas IDC_CHECK dan pilih Tambahkan variabel. Nama variabel m_bFillWithStrings dan klik selesai.
  4. Di kotak dialog, klik ganda dijalankan dan ganti kode berikut
    void CAutoProjectDlg::OnBnClickedRun(){	// TODO: Add your control notification handler code here}					
    dengan:
    void CAutoProjectDlg::OnBnClickedRun(){	CWorkbooks oBooks;	CWorksheets oSheets;	CWorksheet oSheet;	CRange oRange;	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);	// If you have not created Excel, create a new instance.	if (oExcel.m_lpDispatch == NULL) {		oExcel.CreateDispatch("Excel.Application");	}	// Show Excel to the user.	oExcel.put_Visible(TRUE);	oExcel.put_UserControl(TRUE);	// Add a new workbook and get the first worksheet in that book.	oBooks = oExcel.get_Workbooks();	oBook = oBooks.Add(covOptional);	oSheets = oBook.get_Worksheets();	oSheet = oSheets.get_Item(COleVariant((short)1));	// Get a range of data.	oRange = oSheet.get_Range(COleVariant("A1"),covOptional);	oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5));	COleSafeArray saRet;	DWORD numElements[2];	numElements[0] = 5;	numElements[1] = 5;	long index[2];	// Create a BSTR or double safe array.	if (m_bFillWithStrings.GetCheck())		saRet.Create(VT_BSTR,2,numElements);	else		saRet.Create(VT_R8,2,numElements);	// Fill the array with data.	for (int iRow = 1; iRow <= 5; iRow++) {		for (int iCol = 1; iCol <= 5; iCol++) {			index[0]=iRow-1;			index[1]=iCol-1;			if (m_bFillWithStrings.GetCheck()) {				CString szTemp;				szTemp.Format("%d|%d",iRow,iCol);				BSTR bstr = szTemp.AllocSysString();				saRet.PutElement(index,bstr);				SysFreeString(bstr);			} else {				double d = iRow * iCol;				saRet.PutElement(index,&d);			}		}	}	// Send the array to Excel.	oRange.put_Value(covOptional,COleVariant(saRet));}					
    Catatan Visual C++ 2005, Anda harus menambahkan umum bahasa runtime compiler opsi dukungan (/clr:oldSyntax) berhasil menyusun sampel kode sebelumnya. Untuk menambahkan umum bahasa runtime compiler opsi dukungan, ikuti langkah-langkah berikut:
    1. Klik proyek, dan kemudian klikProjectName Properti.

      CatatanProjectName adalah placeholder untuk nama proyek.
    2. Luaskan Konfigurasi Properti, kemudian klik Umum.
    3. Di panel kanan-atas, klik untuk memilih dukungan waktu jalan bahasa umum, lama sintaks (/ clr:oldSyntax) dalam Waktu eksekusi bahasa umum dukungan project pengaturan.
    4. Klik Terapkan, lalu klik OK.
    Untuk informasi selengkapnya tentang opsi compiler umum bahasa runtime dukungan, kunjungi situs web Microsoft Developer Network (MSDN) berikut: Langkah-langkah ini berlaku untuk semua artikel.
  5. Kembali ke kotak dialog dan klik ganda Nilai mendapatkan. Ganti kode berikut
    void CAutoProjectDlg::OnBnClickedGetvalues(){	// TODO: Add your control notification handler code here}					
    dengan:
    void CAutoProjectDlg::OnBnClickedGetvalues(){	CWorksheets oSheets;	CWorksheet oSheet;	CRange oRange;	COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR);	// Make sure that Excel has been started.	if (oExcel.m_lpDispatch == NULL) {		AfxMessageBox("Excel has not been started.  Press button1 to start Excel.");		return;	}	// Get the first worksheet.	oSheets = oBook.get_Worksheets();	oSheet = oSheets.get_Item(COleVariant((short)1));	// Set the range of data to retrieve   	oRange = oSheet.get_Range(COleVariant("A1"),COleVariant("E5"));	// Get the data.	COleSafeArray saRet(oRange.get_Value(covOptional));        long iRows;        long iCols;        saRet.GetUBound(1, &iRows);        saRet.GetUBound(2, &iCols);	CString valueString = "Array Data:\r\n";	long index[2];	// Loop through the data and report the contents.	for (int rowCounter = 1; rowCounter <= iRows; rowCounter++) {		for (int colCounter = 1; colCounter <= iCols; colCounter++) {			index[0]=rowCounter;			index[1]=colCounter;		   			COleVariant vData;			saRet.GetElement(index,vData);			CString szdata(vData);            valueString += szdata;			valueString += "\t";				}		valueString += "\r\n";	}	AfxMessageBox(valueString,MB_SETFOREGROUND,NULL);}					

Uji klien Otomasi

  1. Tekan F5 untuk membuat dan menjalankan program contoh.
  2. Klik Jalankan. Program dimulai Excel dengan buku kerja baru dan memuat cellsA1:E5 worksheet pertama dengan angka data dari array.
  3. Klik Dapatkan nilai. Program mengambil data dalam sel A1:E5 ke baru arrayand Menampilkan hasil di kotak pesan.
  4. Pilih Isi dengan string dan klik Jalankan untuk mengisi sel A1:E5 dengan string data.
  5. Klik Dapatkan nilai untuk menampilkan nilai-nilai string dalam kotak pesan.

Pemecahan masalah

Jika Anda menambahkan kelas pembungkus untuk pustaka objek Excel dengan menggunakan opsi File di Wisaya TypeLib Tambah kelas dari, Anda mungkin menerima pesan galat saat menjelajah ke pustaka objek. Untuk menghindari masalah ini, ketik garis jatuh berseri dan nama lengkap untuk pustaka objek daripada browsing ke berkas. Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di Pangkalan Pengetahuan Microsoft:
311408 BUG: 'Baca-saja' peringatan saat menambahkan MFC kelas dari Perpustakaan
Jika Anda menerima pesan galat ketika Anda membangun aplikasi contoh, perubahan "Varian DialogBox" CRange.h ke "Varian _DialogBox":
peringatan C4003: parameter sebenarnya tidak cukup untuk makro 'DialogBoxA'
Untuk informasi lebih lanjut tentang penyebab kesalahan ini, lihat artikel Pangkalan Pengetahuan berikut:
311407 BUG: MFC Wisaya tidak mengatasi masalah penamaan konflik dengan API makro
Referensi
Untuk informasi lebih lanjut, lihat situs web Microsoft Developer Network (MSDN) berikut:
Pengembangan Microsoft Office dengan Visual Studio
http://msdn2.Microsoft.com/en-US/Library/aa188489 (office.10).aspx
Untuk informasi selengkapnya tentang cara menggunakan larik untuk mengatur dan mengambil kembali data Excel dengan versi Visual Studio, lihat artikel Pangkalan Pengetahuan berikut:
186120 Cara menggunakan MFC untuk mengotomatisasi Excel dan mengisi kisaran dengan Array
186122 Cara menggunakan MFC untuk mengotomatisasi Excel dan Dapatkan Array dari kisaran
247412 INFO: Metode untuk mentransfer Data ke Excel dari Visual Basic
XL kisaran mfc

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 308407 - Tinjauan Terakhir: 11/01/2015 02:06:00 - Revisi: 3.0

Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition, Microsoft Visual C++ .NET 2002 Standard Edition, Microsoft Excel 2002 Standard Edition

  • kbautomation kbhowtomaster kbmt KB308407 KbMtid
Tanggapan