Làm thế nào để tự động hoá Excel sử dụng chức năng MFC và bảng tính

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:178781
Bài viết này đã được lưu trữ. Bài viết được cung cấp "nguyên trạng" và sẽ không còn được cập nhật nữa.
TÓM TẮT
Bài viết này mô tả làm thế nào để tự động hoá Microsoft Excel 97, Microsoft Excel 2000, Microsoft Excel 2002 hoặc Microsoft Excel 2003 bằng cách sử dụng MicrosoftThư viện phiên bản 4,2 (cài đặt với Microsoft Foundation Class (MFC)Visual C++ bản 5.0 và 6.0). Đặc biệt, bài viết này minh hoạlàm thế nào để sử dụng chức năng bảng tính được cung cấp bởi một add-in chẳng hạn như phân tíchToolPak (ATP) và làm thế nào để sử dụng các bảng công thức chức năng được xây dựng trong Microsoft Excel.
THÔNG TIN THÊM
Bạn có thể sao chép mã trong bài viết này để chức năng xử lý thư của mộtsự kiện được xác định trong tập tin .cpp MFC. Tuy nhiên, mục đích của mã làminh họa cho quá trình sử dụng IDispatch giao diện và chức năng thành viên được định nghĩa trong Excel8.olb cho Excel 97, trong Excel9.olb cho Excel 2000, và trong Excel.exe cho Excel 2002 và thư viện kiểu Excel 2003. Lợi ích chính đến từ đọc và hiểu biết về mã trong ví dụ này, do đó bạn có thể sửa đổi các ví dụ hoặc viết mã từ đầu để tự động hoá một chức năng bảng tính trong Microsoft Excel sử dụng MFC.

Các bước để tạo ra các dự án

  1. Làm theo bước 1 đến 12 trong bài viết cơ sở kiến thức Microsoft sau đây để tạo ra một dự án mẫu sử dụng IDispatch giao diện và chức năng thành viên quy định tại Excel8.olb, hoặc Excel9.olb, hoặc Excel.exe cho thư viện kiểu Excel 2003 và Excel 2002:
    178749Làm thế nào để tạo ra một dự án tự động hóa bằng cách sử dụng MFC và một thư viện kiểu
  2. Ở phía trên của AutoProjectDlg.cpp, thêm dòng sau:
          #include "excel8.h"					
    Nếu bạn đang tự động hoá Excel 2000, bao gồm excel9.h. Nếu bạn đang tự động hoá Excel 2002 hoặc Excel 2003, bao gồm excel.h

  3. Thêm mã sau đây để CAutoProjectDlg::OnRun() trong các AutoProjectDLG.cpp tập tin:Mã mẫu:
          try      {      _Application app;     // app is an _Application object.      _Workbook book;       // More object declarations.      _Worksheet sheet;      Workbooks books;      Worksheets sheets;      Range range;          // Used for Microsoft Excel 97 components.      LPDISPATCH lpDisp;    // Often reused variable.      // Common OLE variants. Easy variants to use for calling arguments.      COleVariant        covTrue((short)TRUE),        covFalse((short)FALSE),        covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      // Start Microsoft Excel, get _Application object,      // and attach to app object.      if(!app.CreateDispatch("Excel.Application"))       {        AfxMessageBox("Couldn't CreateDispatch() for Excel");        return;       }      // Set visible.      app.SetVisible(TRUE);      // Register the Analysis ToolPak.      CString sAppPath;      sAppPath.Format ("%s\\Analysis\\Analys32.xll", app.GetLibraryPath());      if(!app.RegisterXLL(sAppPath))        AfxMessageBox("Didn't register the Analys32.xll");      // Get the Workbooks collection.      lpDisp = app.GetWorkbooks();     // Get an IDispatch pointer.      ASSERT(lpDisp);      books.AttachDispatch(lpDisp);    // Attach the IDispatch pointer                                       // to the books object.      // Open a new workbook and attach that IDispatch pointer to the      // Workbook object.      lpDisp = books.Add( covOptional );      ASSERT(lpDisp);      book.AttachDispatch( lpDisp );         // To open an existing workbook, you need to provide all         // arguments for the Open member function. In the case of          // Excel 2002 you must provide 16 arguments.         // However in Excel 2003 you must provide 15 arguments.         // The code below opens a workbook and adds it to the Workbook's         // Collection object. It shows 13 arguments, required for Excel         // 2000.         // You need to modify the path and file name for your own         // workbook.      //       // lpDisp = books.Open("C:\\Test",     // Test.xls is a workbook.      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional, covOptional, covOptional, covOptional,      // covOptional, covOptional );   // Return Workbook's IDispatch      // pointer.      // Get the Sheets collection and attach the IDispatch pointer to your      // sheets object.      lpDisp = book.GetSheets();      ASSERT(lpDisp);      sheets.AttachDispatch(lpDisp);      // Get sheet #1 and attach the IDispatch pointer to your sheet      // object.      lpDisp = sheets.GetItem( COleVariant((short)(1)) );                                        //GetItem(const VARIANT &index)      ASSERT(lpDisp);      sheet.AttachDispatch(lpDisp);      // Fill range A1 with "1/25/98", the settlement date.      lpDisp = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1/25/98")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1/25/98")); // Excel 2002 and Excel 2003      // Fill range A2 with "11/15/99", the maturity date.      lpDisp = sheet.GetRange(COleVariant("A2"), COleVariant("A2"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("11/15/99"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("11/15/99")); // Excel 2002 and Excel 2003      // Fill range A3 with "2", the frequency for semi-annual interest      // payments.      lpDisp = sheet.GetRange(COleVariant("A3"), COleVariant("A3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("2"));  // Excel 97 & Excel 2000range.SetValue2(COleVariant("2"));  // Excel 2002 and Excel 2003      // Fill range A4 with 1, the basis (actual/actual).      lpDisp = sheet.GetRange(COleVariant("A4"), COleVariant("A4"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetValue(COleVariant("1")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("1")); // Excel 2002 and  Excel 2003      // Fill range C1 with the formula "=COUPNCD(A1, A2, A3, A4)" and      // format the cell with a Date type of the Number format.      lpDisp = sheet.GetRange(COleVariant("C1"), COleVariant("C1"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetNumberFormat(COleVariant("mm/dd/yy"));      range.SetFormula(COleVariant("=COUPNCD(A1, A2, A3, A4)"));      /* This is an alternative that works without placing variables on      // the worksheet.      // The values are arguments contained in the SetFormula() call.      // range.SetFormula(COleVariant(                       "=COUPNCD(\"09/15/96\",\"11/15/99\",2,1)"));      */       // *** The example in this block uses a built-in Microsoft Excel      // function.      // You do not have to register any add-in to use the built-in      // Microsoft Excel worksheet functions.      lpDisp = sheet.GetRange(COleVariant("C3"), COleVariant("C3"));      ASSERT(lpDisp);      range.AttachDispatch(lpDisp);      range.SetFormula(COleVariant("=SUM(A3, A4)"));      // or use:      // range.SetFormula(COleVariant("=SUM(2,1)"));      // *** End of example for built-in function usage.      // Release dispatch pointers.      range.ReleaseDispatch();      sheet.ReleaseDispatch();      // This is not really necessary because      // the default second parameter of AttachDispatch releases      // when the current scope is lost.      } // End of processing.        catch(COleException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);        ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);      }      catch(COleDispatchException *e)      {        char buf[1024];     // For the Try...Catch error message.        sprintf(buf,               "COleDispatchException. SCODE: %08lx, Description: \"%s\".",               (long)e->m_wCode,(LPSTR)e->m_strDescription.GetBuffer(512));        ::MessageBox(NULL, buf, "COleDispatchException",                           MB_SETFOREGROUND | MB_OK);      }      catch(...)      {        ::MessageBox(NULL, "General Exception caught.", "Catch-All",                           MB_SETFOREGROUND | MB_OK);      }					
THAM KHẢO
Để có thêm thông tin về các ứng dụng tự động hóa của văn phòng, bấm vào số bài viết dưới đây để xem bài viết trong cơ sở kiến thức Microsoft:
222101 Làm thế nào để: Tìm và sử dụng văn phòng đối tượng mẫu tài liệu
MFC VC ++ tự động hóa typelib IDispatch ATP toolpack

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

Thuộc tính

ID Bài viết: 178781 - Xem lại Lần cuối: 12/05/2015 08:16:16 - Bản sửa đổi: 2.0

Microsoft Foundation Class Library 4.2, Microsoft Excel 2002 Standard Edition

  • kbnosurvey kbarchive kbautomation kbhowto kbinterop kbmt KB178781 KbMtvi
Phản hồi
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)