Làm thế nào để sử dụng MFC để tự động hoá Excel và tạo và định dạng một bảng tính mới

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:179706
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 cho thấy làm thế nào để tự động bằng cách sử dụng Microsoft Excel thư viện Microsoft Foundation Class (MFC), phiên bản 4,2 (cài đặt với Microsoft Visual C++ bản 5.0 và 6.0).

Bài viết mô tả một kỹ thuật cho việc sử dụng tự động hóa OLE để tạo/định dạng một Microsoft Excel workbook; nó giới thiệu một số phương pháp/tài sản (từ loại Microsoft Excel thư viện) cho thêm dữ liệu vào bảng tính và định dạng các bảng tính.

Ghi chú cho tự động hoá Microsoft Excel 2000 và 2002

Mẫu mã trong bài viết này sử dụng hàm bao lớp được tạo ra từ Excel 97 đối tượng thư viện (Excel 8.olb). Với chút thay đổi, điều này Mã có thể được áp dụng cho một khách hàng tự động hóa sử dụng lớp hàm bao cho Excel 2000 (Excel9.olb) hoặc Excel 2002 (Excel.olb). Để có thêm thông tin về bằng cách sử dụng mẫu mã được mô tả trong bài viết này với Microsoft Excel 2000 hoặc 2002 loại thư viện, xin vui lòng bấm vào số bài viết dưới đây để xem nó trong các Cơ sở kiến thức Microsoft:
224925 Thông tin: Thư viện kiểu cho các văn phòng có thể thay đổi với mới phát hành
THÔNG TIN THÊM
Bạn có thể sao chép mã trong bài viết này để thông báo xử lý chức năng của một sự kiện được xác định trong tập tin .cpp MFC. Tuy nhiên, mục đích các mã là để minh họa cho quá trình sử dụng giao diện IDispatch và tài khoản của chức năng được định nghĩa trong thư viện kiểu Excel8.olb. Lợi ích chính của bài viết này, tuy nhiên, đến từ đọc và hiểu biết về mã trong các Ví dụ để các bạn có thể sửa đổi các ví dụ hoặc viết mã riêng của bạn để tự động hóa Microsoft Excel 97 sử dụng MFC.

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

  1. Làm theo bước 1 đến 12 tại Microsoft sau Bài viết cơ sở kiến thức để 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 được định nghĩa trong thư viện kiểu Excel8.olb:
    178749Làm thế nào để tạo tự động hóa dự án sử dụng MFC và một thư viện kiểu
  2. Ở phía trên của các tập tin AutoProjectDlg.cpp, thêm các dòng sau:
          #include "excel8.h"					
  3. Thêm mã sau đây để CAutoProjectDlg::OnRun() trong các AutoProjectDLG.cpp tập tin:

    Mẫu mã

          // Commonly used OLE variants.      COleVariant                 covTrue((short)TRUE),                 covFalse((short)FALSE),                 covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      _Application app;      Workbooks books;      _Workbook book;      Worksheets sheets;      _Worksheet sheet;      Range range;      Font font;      Range cols;      // Start Excel and get Application object.      if(!app.CreateDispatch("Excel.Application"))      {       AfxMessageBox("Couldn't start Excel and get Application object.");       return;      }      //Get a new workbook.      books = app.GetWorkbooks();      book = books.Add (covOptional);      //Get the first sheet.      sheets =book.GetSheets();      sheet = sheets.GetItem(COleVariant((short)1));      //Fill cells A1, B1, C1, and D1 one cell at a time with "headers".      range = sheet.GetRange(COleVariant("A1"),COleVariant("A1"));      range.SetValue(COleVariant("First Name"));      range = sheet.GetRange(COleVariant("B1"),COleVariant("B1"));      range.SetValue(COleVariant("Last Name"));      range = sheet.GetRange(COleVariant("C1"),COleVariant("C1"));      range.SetValue(COleVariant("Full Name"));      range = sheet.GetRange(COleVariant("D1"),COleVariant("D1"));      range.SetValue(COleVariant("Salary"));      //Format A1:D1 as bold, vertical alignment = center.      range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));      font = range.GetFont();      font.SetBold(covTrue);      range.SetVerticalAlignment(               COleVariant((short)-4108));   //xlVAlignCenter = -4108      //Fill A2:B6 with an array of values (First & Last Names).      {         COleSafeArray saRet;         DWORD numElements[]={5,2};   //5x2 element array         saRet.Create(VT_BSTR, 2, numElements);         //Fill the 5x2 SafeArray with the following data:         //   John      Smith         //   Tom       Brown         //   Sue       Thomas         //   Jane      Jones         //   Adam      Johnson         FillSafeArray(L"John", 0, 0, &saRet);         FillSafeArray(L"Smith", 0, 1, &saRet);         FillSafeArray(L"Tom", 1, 0, &saRet);         FillSafeArray(L"Brown", 1, 1, &saRet);         FillSafeArray(L"Sue", 2, 0, &saRet);         FillSafeArray(L"Thomas", 2, 1, &saRet);         FillSafeArray(L"Jane", 3, 0, &saRet);         FillSafeArray(L"Jones", 3, 1, &saRet);         FillSafeArray(L"Adam", 4, 0, &saRet);         FillSafeArray(L"Johnson", 4, 1, &saRet);         range = sheet.GetRange(COleVariant("A2"), COleVariant("B6"));         range.SetValue(COleVariant(saRet));         saRet.Detach();      }      //Fill C2:C6 with a relative formula (=A2 & " " & B2).      range = sheet.GetRange(COleVariant("C2"), COleVariant("C6"));      range.SetFormula(COleVariant("=A2 & \" \" & B2"));      //Fill D2:D6 with a formula(=RAND()*100000) and apply a number      //format.      range = sheet.GetRange(COleVariant("D2"), COleVariant("D6"));      range.SetFormula(COleVariant("=RAND()*100000"));      range.SetNumberFormat(COleVariant("$0.00"));      //AutoFit columns A:D.      range = sheet.GetRange(COleVariant("A1"), COleVariant("D1"));      cols = range.GetEntireColumn();      cols.AutoFit();      //Manipulate a variable number of columns for Quarterly Sales Data.      {         short NumQtrs;         CString msg;         Range resizedrange;         Interior interior;         Borders borders;         //Determine how many quarters to display data for.         for(NumQtrs=1;NumQtrs<=3;NumQtrs++)         {            msg.Format("Enter sales data for %d quarter(s)?", NumQtrs);            if(AfxMessageBox(msg,MB_YESNO)==IDYES)            {               break;            }         }         msg.Format("Displaying data for %d quarters.", NumQtrs);         AfxMessageBox(msg);         //Starting at E1, fill headers for the number of columns selected.         range = sheet.GetRange(COleVariant("E1"), COleVariant("E1"));         resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));         resizedrange.SetFormula(                COleVariant("=\"Q\" & COLUMN()-4 & CHAR(10) & \"Sales\""));         //Change the Orientation and WrapText properties for the headers.         resizedrange.SetOrientation(COleVariant((short)38));         resizedrange.SetWrapText(covTrue);         //Fill the interior color of the headers.         interior = resizedrange.GetInterior();         interior.SetColorIndex(COleVariant((short)36));         //Fill the columns with a formula and apply a number format.         range = sheet.GetRange(COleVariant("E2"), COleVariant("E6"));         resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));         resizedrange.SetFormula(COleVariant("=RAND()*100"));         resizedrange.SetNumberFormat(COleVariant("$0.00"));         //Apply borders to the Sales data and headers.         range = sheet.GetRange(COleVariant("E1"), COleVariant("E6"));         resizedrange= range.GetResize(covOptional, COleVariant(NumQtrs));         borders = resizedrange.GetBorders();         borders.SetWeight(COleVariant((short)2));   //xlThin = 2         //Add a Totals formula for the Quarterly sales data and apply a         //border.         range = sheet.GetRange(COleVariant("E8"), COleVariant("E8"));         resizedrange = range.GetResize(covOptional, COleVariant(NumQtrs));         resizedrange.SetFormula(COleVariant("=SUM(E2:E6)"));         borders = resizedrange.GetBorders();         {            Border bottomborder;            bottomborder = borders.GetItem((long)9);            bottomborder.SetLineStyle(                           COleVariant((short)-4119));   //xlDouble = -4119            bottomborder.SetWeight(                           COleVariant((short)4));       //xlThick = 4         }      }      //Make the application visible and give the user control of      //Microsoft Excel.      app.SetVisible(TRUE);      app.SetUserControl(TRUE);					
  4. Thêm các chức năng sau đây để AutoProjectDLG.cpp, định vị nó một nơi nào đó trước khi CAutoProjectDlg::OnRun():

    Mẫu mã

          void FillSafeArray(OLECHAR FAR* sz, int iRow, int iCol,                         COleSafeArray* sa)      {         VARIANT v;         long index[2];         index[0] = iRow;         index[1] = iCol;         VariantInit(&v);         v.vt = VT_BSTR;         v.bstrVal = SysAllocString(sz);         sa->PutElement(index, v.bstrVal);         SysFreeString(v.bstrVal);         VariantClear(&v);      }					
  5. Tại phòng thu nhà phát triển, chạy các ứng dụng. Khi hộp thoại hộp xuất hiện (ví dụ tạo ra một hộp thoại dựa trên ứng dụng), bấm chạy nút.
Trội 8 8,0 XL97 XL8

Thuộc tính

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

Microsoft Excel 2000 Standard Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Foundation Class Library 4.2, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition, Microsoft Excel 2002 Standard Edition, Microsoft Excel 97 Standard Edition

  • kbnosurvey kbarchive kbnewfile kbfunctions kbprogramming kbautomation kbhowto kbinterop kbmt KB179706 KbMtvi
Phản hồi