Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

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

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
Đố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ã.
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):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
XL phạm vi mfc

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 308407 - Xem lại Lần cuối: 08/27/2011 21:07:00 - Bản sửa đổi: 2.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 KbMtvi
Phản hồi