Cara mengotomatisasi Excel dari MFC dan Visual C++ 2005 atau Visual C++.NET untuk mengisi atau memperoleh data dalam berbagai menggunakan array

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 308407 - Melihat produk di mana artikel ini berlaku.
Untuk Microsoft C#.NET versi artikel ini, lihat 302096.
Untuk Microsoft Visual Dasar.NET versi artikel ini, lihat 302094.
Catatan Microsoft Visual c ++ 2005, Microsoft Visual C++.NET 2003, dan Microsoft Visual C++.NET 2002 mendukung kedua kode dikelola model yang disediakan oleh Microsoft.NET Framework dan tidak dikelola asli Microsoft Windows kode model. Informasi di dalam artikel ini hanya berlaku untuk tidak dikelola Visual C++ kode.
Perbesar semua | Perkecil semua

Pada Halaman ini

RINGKASAN

Artikel ini menunjukkan bagaimana untuk mengotomatisasi Microsoft Excel dari Visual C++ 2005 atau Visual C++.NET untuk mengisi dan mengambil nilai-nilai dalam berbagai multi-cell oleh menggunakan array.

Membuat klien otomasi untuk Excel

Untuk mengisi multi-cell kisaran tanpa mempopulasikan sel satu di waktu, Anda dapat mengatur Nilai properti Kisaran objek ke dua dimensi array. Demikian pula, Anda dapat mengambil dua dimensi array nilai untuk sel multiple sekaligus dengan menggunakan Nilai properti. Langkah-langkah berikut menunjukkan proses ini untuk kedua menetapkan dan mengambil data menggunakan dua dimensi array.
  1. Ikuti langkah-langkah dalam "Membuat otomatisasi klien" bagian dari artikel Basis Pengetahuan Microsoft berikut untuk menciptakan dasar Klien otomasi:
    307473 Cara menggunakan perpustakaan jenis untuk kantor otomatisasi dari Visual C++.NET
    Di langkah 3, menambahkan kedua tombol dan kotak centang untuk bentuk. Mengubah ID tombol untuk IDC_GETVALUES dan caption untuk Mendapatkan nilai-nilai. Mengubah ID kotak centang untuk IDC_CHECK dan caption untuk Mengisi dengan string.

    Pada langkah 4 artikel, pilih "Microsoft Excel 10,0 perpustakaan objek" Apabila Anda sedang mengotomatisasi Excel 2002 dari Office XP. Lokasi default untuk Excel 2002 adalah C:\Program Files\Microsoft Office\Office10\Excel.exe. Atau, pilih "Microsoft Excel 11,0 perpustakaan objek" Apabila Anda sedang mengotomatisasi Microsoft Office Excel 2003. Lokasi default untuk Excel 2003 adalah C:\Program Files\Microsoft Office\Office11\Excel.exe. Pilih antarmuka Microsoft Excel berikut:
    • _Application
    • _Workbook
    • _Worksheet
    • Kisaran
    • Buku kerja
    • Lembar Kerja
    Pada langkah 6, tambahkan berikut # termasuk pernyataan langsung setelah c++ sekali petunjuk di Autoprojectdlg.h:
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    					
  2. Menambahkan variabel anggota publik dua berikut untuk CAutoProjectDlg kelas:
    CApplication oExcel;
    CWorkbook oBook;
    					
  3. Pada kotak dialog, klik kanan IDC_CHECK dan pilih Menambahkan variabel. Nama variabel m_bFillWithStrings dan klik Menyelesaikan.
  4. Pada kotak dialog, klik dua kali Menjalankan dan mengganti 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 Dalam Visual C++ 2005, Anda harus menambahkan common language runtime dukungan kompiler pilihan)/CLR:oldSyntax) untuk berhasil mengkompilasi kode sampel sebelumnya. Untuk menambahkan runtime bahasa umum dukungan opsi kompiler, ikuti langkah berikut:
    1. Klik Project, lalu klikProjectName Properti.

      Catatan ProjectName adalah sebuah tempat untuk nama proyek.
    2. Memperluas Konfigurasi properti, lalu klikGeneral.
    3. Dalam pane kanan, klik untuk memilih Common Language Runtime Support, sintaks tua (/ clr:oldSyntax) dalamCommon Language Runtime dukungan Seting Proyek.
    4. KlikMenerapkan, lalu klik Oke.
    Untuk informasi lebih lanjut tentang common language runtime mendukung opsi kompiler, kunjungi Web site Microsoft Developer Network (MSDN) berikut:
    http://msdn2.Microsoft.com/en-us/library/k8d11d4s.aspx
    Langkah-langkah berikut berlaku untuk seluruh artikel.
  5. Kembali ke kotak dialog dan klik dua kali Mendapatkan nilai-nilai. 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);
    }
    					

Menguji klien otomasi

  1. Tekan F5 untuk membangun dan menjalankan program sampel.
  2. Klik Menjalankan. Program dimulai Excel dengan buku kerja baru dan saran populates sel A1:E5 lembar kerja pertama dengan data numerik dari array.
  3. Klik Mendapatkan nilai-nilai. Program akan mengambil data di sel A1:E5 ke array baru dan menampilkan hasilnya di kotak pesan.
  4. Pilih Mengisi dengan string dan klik Menjalankan untuk mengisi sel A1:E5 dengan string data.
  5. Klik Mendapatkan nilai-nilai untuk menampilkan nilai-nilai string di kotak pesan.

Pemecahan Masalah

Jika Anda menambahkan kelas pembungkus untuk Excel perpustakaan objek dengan menggunakan The Berkas pilihan dalam kelas dari TypeLib Wisaya Penambahan, Anda akan menerima pesan galat ketika Anda browsing ke perpustakaan objek. Untuk menghindari masalah ini, Ketik penuh lintasan dan nama berkas untuk perpustakaan objek bukannya browsing ke berkas. Untuk informasi tambahan, klik nomor artikel di bawah ini untuk melihat artikel di dalam Basis Pengetahuan Microsoft:
311408 BUG: 'Read-Only' peringatan ketika menambahkan MFC kelas dari perpustakaan
Jika Anda menerima galat berikut pesan Anda membangun aplikasi sampel Anda, mengubah "Varian DialogBox" di CRange.h untuk "Varian _DialogBox":
peringatan C4003: tidak cukup sebenarnya parameter untuk makro 'DialogBoxA'
Untuk informasi lebih lanjut tentang penyebab kesalahan ini, lihat artikel Basis Pengetahuan berikut:
311407 BUG: MFC Wizard tidak menyelesaikan penamaan konflik dengan API makro

REFERENSI

Untuk selengkapnya, lihat Microsoft berikut pengembang Situs Web Network (MSDN):
Microsoft Office Development with Visual Studio
.aspx http://msdn2.Microsoft.com/en-us/library/aa188489 (office.10)
Untuk informasi lebih lanjut tentang menggunakan array untuk menetapkan dan mengambil Excel data dengan versi sebelumnya dari Visual Studio, lihat basis pengetahuan berikut Artikel:
186120 Cara menggunakan MFC untuk mengotomatisasi Excel dan mengisi berbagai dengan Array
186122 Cara menggunakan MFC untuk mengotomatisasi Excel dan mendapatkan sebuah Array dari berbagai
247412 INFO: Metode untuk mentransfer Data ke Excel dari Visual Basic

Properti

ID Artikel: 308407 - Kajian Terakhir: 24 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbautomation kbhowtomaster kbmt KB308407 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:308407

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