Làm th? nào đ? t? đ?ng hoá Excel t? MFC và Visual C++ 2005 ho?c Visual C++.NET đ? đi?n vào ho?c có đư?c d? li?u trong m?t ph?m vi s? d?ng m?ng

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 308407 - Xem s?n ph?m mà bài này áp d?ng vào.
Đ?i v?i m?t Microsoft C#.NET Phiên b?n c?a bài vi?t này, xem 302096.
Đ?i v?i m?t th? giác Microsoft Cơ b?n.NET Phiên b?n c?a bài vi?t này, xem 302094.
Lưu ? Microsoft Visual C++ 2005, Microsoft Visual C++.NET 2003 và Microsoft Visual C++.NET 2002 h? tr? c? hai đư?c qu?n l? m? mô h?nh đư?c cung c?p b?i Microsoft.NET Framework và không đư?c qu?n l? b?n đ?a c?a Microsoft Windows ngư?i m?u m?. Thông tin trong bài vi?t này ch? áp d?ng cho không đư?c qu?n l? Visual C++ M?.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TÓM T?T

Bài vi?t-by-step này ch?ng t? làm th? nào đ? t? đ?ng hoá Microsoft Excel t? Visual C++ 2005 ho?c Visual c + +.NET đ? đi?n vào và l?y giá tr? trong m?t ph?m vi multi-cell b?i b?ng cách s? d?ng m?ng.

T?o ra m?t khách hàng t? đ?ng hóa cho Excel

Đ? đi?n vào multi-cell m?t ph?m vi mà không c?n populating các t? bào m?t lúc m?t th?i gian, b?n có th? thi?t l?p các Giá tr? tài s?n c?a m?t Ph?m vi đ?i tư?ng vào m?t m?ng hai chi?u. Tương t? như v?y, b?n có th? l?y m?t hai chi?u m?ng c?a các giá tr? cho các t? bào nhi?u cùng m?t lúc b?ng cách s? d?ng các Giá tr? b?t đ?ng s?n. Các bư?c sau đây ch?ng minh quá tr?nh này cho c? hai thi?t l?p và truy xu?t d? li?u b?ng cách s? d?ng hai chi?u m?ng.
  1. Làm theo các bư?c trong nh?ng "t?o an t? đ?ng hóa Client" ph?n c?a bài vi?t cơ s? ki?n th?c Microsoft sau đ? t?o ra m?t cơ b?n T? đ?ng hóa khách hàng:
    307473 Làm th? nào đ? s? d?ng m?t thư vi?n ki?u cho văn ph?ng t? đ?ng hóa t? Visual c + +.NET
    Trong bư?c 3, thêm m?t th? hai nút và m?t h?p ki?m đ? các h?nh th?c. Thay đ?i ID c?a các nút đ? IDC_GETVALUES và chú thích đ? Nh?n đư?c các giá tr?. Thay đ?i ID c?a h?p ki?m IDC_CHECK và chú thích đ? Đi?n vào v?i Strings.

    Trong bư?c 4 c?a bài báo, ch?n "Microsoft Excel thư vi?n đ?i tư?ng 10,0" N?u b?n đang t? đ?ng hoá Excel 2002 t? Office XP. V? trí m?c đ?nh cho Excel 2002 là C:\Program Files\Microsoft Office\Office10\Excel.exe. Ho?c, ch?n "Microsoft Excel thư vi?n đ?i tư?ng 11,0" N?u b?n đang t? đ?ng hoá Microsoft Office Excel 2003. V? trí m?c đ?nh cho Excel 2003 là C:\Program Files\Microsoft Office\Office11\Excel.exe. Ch?n giao di?n Microsoft Excel sau đây:
    • _Application
    • _Workbook
    • _Worksheet
    • Ph?m vi
    • Sách bài t?p
    • B?ng
    Trong bư?c 6, thêm dư?i đây # include phát bi?u tr?c ti?p sau khi các #pragma m?t l?n ch? th? trong Autoprojectdlg.h:
    #include "CApplication.h"
    #include "CRange.h"
    #include "CWorkbook.h"
    #include "CWorkbooks.h"
    #include "CWorksheet.h"
    #include "CWorksheets.h"
    					
  2. Thêm sau hai công viên bi?n đ? các CAutoProjectDlg l?p:
    CApplication oExcel;
    CWorkbook oBook;
    					
  3. Trên h?p tho?i c?a b?n, b?m chu?t ph?i vào IDC_CHECK và ch?n Thêm bi?n. Tên bi?n m_bFillWithStrings và b?m vào K?t thúc.
  4. Trên h?p tho?i c?a b?n, b?m đúp vào Ch?y và thay th? m? sau
    void CAutoProjectDlg::OnBnClickedRun()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    v?i:
    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));
    }
    					
    Lưu ? Visual C++ 2005, b?n ph?i thêm ph? bi?n ngôn ng? runtime h? tr? biên d?ch tùy ch?n)/CLR:oldSyntax) đ? thành công biên d?ch m?u m? trư?c đó. Đ? thêm ph? bi?n h? tr? th?i gian ch?y ngôn ng? biên d?ch tùy ch?n, h?y làm theo các bư?c sau:
    1. Nh?p vào D? án, sau đó b?mProjectName Thu?c tính.

      Lưu ? ProjectName là m?t gi? ch? cho tên c?a d? án.
    2. M? r?ng C?u h?nh thu?c tính, sau đó b?mT?ng quát.
    3. Trong ngăn bên ph?i, b?m vào đ? ch?n H? tr? th?i gian ch?y ngôn ng? ph? bi?n, cú pháp c? (/ clr:oldSyntax) trong cácPh? bi?n th?i gian ch?y ngôn ng? h? tr? các thi?t đ?t c?a d? án.
    4. Nh?p vàoÁp d?ng, sau đó b?m Ok.
    Đ? bi?t thêm thông tin v? th?i gian ch?y ngôn ng? ph? bi?n h? tr? tùy ch?n biên d?ch, ghé thăm Web site sau c?a Microsoft Developer Network (MSDN):
    http://msdn2.Microsoft.com/en-US/Library/k8d11d4s.aspx
    Các bư?c này áp d?ng cho toàn b? bài vi?t.
  5. Quay tr? l?i c?a b?n h?p tho?i và nh?p đúp vào Nh?n đư?c các giá tr?. Thay th? m? sau
    void CAutoProjectDlg::OnBnClickedGetvalues()
    {
    	// TODO: Add your control notification handler code here
    }
    					
    v?i:
    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);
    }
    					

Ki?m tra khách hàng t? đ?ng hóa

  1. Nh?n F5 đ? xây d?ng và ch?y chương tr?nh m?u.
  2. Nh?p vào Ch?y. Chương tr?nh b?t đ?u Excel v?i m?t b?ng tính m?i và populates các t? bào A1:E5 c?a b?ng tính đ?u tiên v?i d? li?u s? t? m?t m?ng.
  3. Nh?p vào Nh?n đư?c các giá tr?. Chương tr?nh l?y các d? li?u trong các t? bào A1:E5 thành m?t m?ng m?i và hi?n th? các k?t qu? trong m?t h?p thư.
  4. Ch?n Đi?n vào v?i Strings và nh?p vào Ch?y đ? đi?n vào các t? bào A1:E5 v?i chu?i d? li?u.
  5. Nh?p vào Nh?n đư?c các giá tr? đ? hi?n th? các giá tr? chu?i trong m?t h?p thư.

Khắc phục sự cố

N?u b?n thêm l?p gi? cho Excel đ?i tư?ng thư vi?n b?ng cách s? d?ng các Tệp tùy ch?n trong thu?t l?p t? TypeLib s? thêm, b?n có th? nh?n đư?c m?t thông báo l?i khi b?n duy?t đ?n thư vi?n đ?i tư?ng. Đ? tránh v?n đ? này, G? đ?y đ? đư?ng d?n và tên t?p cho thư vi?n đ?i tư?ng thay v? c?a tr?nh duy?t đ? các t?p tin. Đ? bi?t thêm chi ti?t, b?m vào các s? bài vi?t dư?i đây đ? xem bài vi?t trong cơ s? ki?n th?c Microsoft:
311408 L?I: 'Ch? có đ?c' Warning khi thêm MFC l?p t? thư vi?n
N?u b?n nh?n đư?c l?i sau thông báo khi b?n xây d?ng ?ng d?ng m?u c?a b?n, thay đ?i "Bi?n th? DialogBox" trong CRange.h đ? "Bi?n th? _DialogBox":
c?nh báo C4003: không đ? th?c t? các tham s? cho v? mô 'DialogBoxA'
Cho bi?t thêm thông tin v? nguyên nhân l?i này, h?y xem bài vi?t ki?n th?c cơ b?n sau đây:
311407 L?I: MFC thu?t s? không gi?i quy?t đ?t tên cu?c xung đ?t v?i API Macros

THAM KH?O

Đ? bi?t thêm chi ti?t, xem các nhà phát tri?n Microsoft sau đây Trang Web m?ng (MSDN):
Văn ph?ng Microsoft phát tri?n v?i Visual Studio
http://msdn2.Microsoft.com/en-US/Library/aa188489 (office.10) .aspx
Đ? bi?t thêm v? vi?c s? d?ng m?ng đ? thi?t l?p và truy xu?t Excel d? li?u v?i phiên b?n trư?c c?a Visual Studio, xem kho tàng ki?n th?c sau đây bài vi?t:
186120 Làm th? nào đ? s? d?ng MFC đ? t? đ?ng hoá Excel và đi?n vào m?t t?m ho?t đ?ng v?i m?t m?ng
186122 Làm th? nào đ? s? d?ng MFC đ? t? đ?ng hoá Excel và có đư?c m?t m?ng t? m?t lo?t các
247412 Thông báo: Phương pháp đ? chuy?n d? li?u vào Excel t? Visual Basic

Thu?c tính

ID c?a bài: 308407 - L?n xem xét sau cùng: 27 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • 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
T? khóa: 
kbautomation kbhowtomaster kbmt KB308407 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:308407

Cung cấp Phản hồi

 

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