Làm thế nào để sử dụng MFC để tạo ra một Microsoft Excel biểu đồ

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:178783
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 thảo luận về cách sử dụng phiên bản 4,2 của Microsoft FoundationThư viện Class (MFC) được cài đặt với Microsoft Visual C++ Phiên bản 5.0 và6.0 để tự động hoá Microsoft Excel để cho nó sẽ cư một bảngvới dữ liệu và tạo charts.
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 giao diện IDispatch và các thành viênchức năng được định nghĩa trong thư viện kiểu Excel. Lợi ích chính đếntừ đọc và hiểu biết về các mã do đó bạn có thể sửa đổi các ví dụ,hoặc viết mã từ đầu để tự động hoá Microsoft Excel 97, Excel 2000 hoặc Excel 2002.

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

Một số phương pháp và các thuộc tính đã thay đổi trong Microsoft Excel 2000 và mới hơn. Để thêm thông tin về việc sử dụng mẫu mã được mô tả trong bài viết này với Microsoft Excel 2000 và thư viện kiểu sau này, hãy xem bài viết sau trong 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

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

  1. Trong Microsoft Excel, tạo ra một bảng tính mới tên là Test.xls và lưu nó vào thư mục gốc của ổ C.
  2. Làm theo bước 1 đến 12 trong sau đây Microsoft Knowledge Base bài viết để tạo ra một dự án mẫu sử dụng giao diện IDispatch và chức năng thành viên được định nghĩa trong thư viện kiểu Excel:
    178749 Là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
  3. Ở phía trên của AutoProjectDlg.cpp, thêm dòng sau:
          #include "excel8.h" // excel9.h for Excel 2000, excel.h for Excel 2002					
  4. Thêm mã sau đây để CAutoProjectDlg::OnRun() trong các AutoProjectDLG.cpp tập tin.

    Mẫu mã

          try      {       _Application app;  // app is the Excel _Application object.       _Workbook book;       _Worksheet sheet;       _Chart chart;       Workbooks books;       Worksheets sheets;       Range range;       ChartObjects chartobjects;       Charts charts;       LPDISPATCH lpDisp;       // Common OLE variants. These are easy variants to use for       // calling arguments.       COleVariant                  covTrue((short)TRUE),                  covFalse((short)FALSE),                  covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);       // Start Excel and get the Application object.       if(!app.CreateDispatch("Excel.Application"))       {        AfxMessageBox(             "Couldn't start Excel and get an application 0bject");        return;       }       // Set visible.       app.SetVisible(TRUE);       // Get Workbooks collection.       lpDisp = app.GetWorkbooks();  // Get an IDispatch pointer.       ASSERT(lpDisp);       books.AttachDispatch( lpDisp );  // Attach the IDispatch pointer                                        // to the books object.          // Open a workbook.          lpDisp = books.Open("C:\\Test",                      covOptional, covOptional, covOptional, covOptional,                      covOptional, covOptional, covOptional, covOptional,                      covOptional, covOptional, covOptional, covOptional,                      covOptional, covOptional, covOptional); // Excel 2000 requires only 13 arguments          ASSERT(lpDisp);  // It should have worked.       // Attach to a Workbook object.       book.AttachDispatch( lpDisp );  // Attach the IDispatch pointer                                       // to the Workbook object.       // Get sheets.       lpDisp = book.GetSheets();       ASSERT(lpDisp);       sheets.AttachDispatch(lpDisp);       lpDisp = sheets.GetItem( COleVariant((short)(1)) );       ASSERT(lpDisp);       // Attach the lpDisp pointer to a Worksheet object.       sheet.AttachDispatch(lpDisp);       lpDisp = sheet.GetRange(COleVariant("A1"), COleVariant("W40"));                               // The range is from A1 to W40.       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);  // Attach the IDispatch pointer                                      // to the range object.       range.Clear();  // Could be ClearContents().       ::Sleep(500); // So you can see it happen.       lpDisp = sheet.GetRange(COleVariant("A3"), COleVariant("A3"));                                                 // From A3 to A3.       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);  // Attach the IDispatch pointer                                      // the range object.       range.SetValue(COleVariant("March")); // Excel 97 & Excel 2000.range.SetValue2(COleVariant("March")); // Insert March into range.       // Following is a series of repetitive steps to populate the       // worksheet's cells with a series of Months and values to be       // used in the Chart object, which is yet to be constructed.       lpDisp = sheet.GetRange(COleVariant("B3"), COleVariant("B3"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("12")); // 97 & 2000range.SetValue2(COleVariant("12")); //  Value for March.       lpDisp = sheet.GetRange(COleVariant("A4"), COleVariant("A4"));            // Months will be in column A, values in column B.       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("April"));// Excel 97 & Excel 2000range.SetValue2(COleVariant("April")); // Excel 2002       lpDisp = sheet.GetRange(COleVariant("B4"), COleVariant("B4"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("8")); // Excel 97 & Excel 2000range.SetValue2(COleVariant("8")); // Excel 2002       lpDisp = sheet.GetRange(COleVariant("A5"), COleVariant("A5"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("May"));range.SetValue2(COleVariant("May"));       lpDisp = sheet.GetRange(COleVariant("B5"), COleVariant("B5"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("2"));range.SetValue2(COleVariant("2"));       lpDisp = sheet.GetRange(COleVariant("A6"), COleVariant("A6"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("June"));range.SetValue2(COleVariant("June"));       lpDisp = sheet.GetRange(COleVariant("B6"), COleVariant("B6"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("11"));range.SetValue2(COleVariant("11"));       lpDisp = sheet.GetRange(COleVariant("A7"), COleVariant("A7"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("July"));range.SetValue2(COleVariant("July"));       lpDisp = sheet.GetRange(COleVariant("B7"), COleVariant("B7"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("16"));range.SetValue2(COleVariant("16"));       // The cells are populated. To start the chart,       // declare some long variables and site the chart.       long left, top, width, height;       left = 100;       top = 10;       width = 350;       height = 250;       lpDisp = sheet.ChartObjects(covOptional);       ASSERT(lpDisp);       chartobjects.AttachDispatch(lpDisp); // Attach the lpDisp pointer                                  // for ChartObjects to the chartobjects                                  // object.       ChartObject chartobject = chartobjects.Add(left, top, width, height);                                 //defines the rectangle,                                 // adds a new chart at that rectangle and                                 // assigns its object reference to a                                 // ChartObject variable named chartobject       chart.AttachDispatch(chartobject.GetChart()); // GetChart() returns                                         // LPDISPATCH, and this attaches                                          // it to your chart object.       lpDisp = sheet.GetRange(COleVariant("A3"), COleVariant("B7"));                         // The range containing the data to be charted.       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       VARIANT var; // ChartWizard needs a Variant for the Source range.       var.vt = VT_DISPATCH; // .vt is the usable member of the tagVARIANT                             // Struct. Its value is a union of options.       var.pdispVal = lpDisp; // Assign IDispatch pointer                              // of the Source range to var.       chart.ChartWizard(var,                    // Source.                        COleVariant((short)11),  // Gallery: 3d Column.                        covOptional,             // Format, use default.                        COleVariant((short)1),   // PlotBy: xlRows.                        COleVariant((short)0),   // CategoryLabels.                        COleVariant((short)1),   // SeriesLabels.                        COleVariant((short)TRUE),  // HasLegend.                        COleVariant("Use by Month"),  // Title.                        COleVariant("Month"),    // CategoryTitle.                        COleVariant("Usage in Thousands"),  // ValueTitles.                        covOptional              // ExtraTitle.                        );       // The return is void.       ::Sleep(3000);       chartobject.Delete();  // Removes the first chartobject, sets the       // ChartObjects.Item() count to 0. The next chart will restore the       // item count to 1.       ::Sleep(3000);  // Set the selected range to be erased.       range.Clear();  // Erase the usage data.       // Beginning of chart 2.       lpDisp = sheet.GetRange(COleVariant("B3"), COleVariant("B3"));                                      // From B3 to B3.       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);  // Attach the IDispatch pointer                                      // to the range object.       range.SetValue(COleVariant("Chocolate")); // Insert Chocolate into                                                 // the range object.range.SetValue2(COleVariant("Chocolate")); // Insert Chocolate       // Following is a series of repetitive steps to populate the       // worksheet's cells with a series of Flavors and values to be       // used in the chart object, your second chart.       lpDisp = sheet.GetRange(COleVariant("B4"), COleVariant("B4"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("12")); // Value for Chocolate.range.SetValue2(COleVariant("12")); // Value for Chocolate.       lpDisp = sheet.GetRange(COleVariant("C3"), COleVariant("C3"));            // Flavors will be in row 3, values in row 4.       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("Vanilla"));range.SetValue2(COleVariant("Vanilla"));       lpDisp = sheet.GetRange(COleVariant("C4"), COleVariant("C4"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("8"));range.SetValue2(COleVariant("8"));       lpDisp = sheet.GetRange(COleVariant("D3"), COleVariant("D3"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("Orange"));range.SetValue2(COleVariant("Orange"));       lpDisp = sheet.GetRange(COleVariant("D4"), COleVariant("D4"));       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       range.SetValue(COleVariant("6"));range.SetValue2(COleVariant("6"));       // The cells are populated. To start the chart,       // define the bounds, and site the chart.       left = 250;       top = 40;       width = 300;       height = 300;       lpDisp = sheet.ChartObjects(covOptional);       ASSERT(lpDisp);       chartobjects.AttachDispatch(lpDisp); // Attach the lpDisp pointer                                   // for ChartObjects to the chartobjects                                   // object.       chartobjects.Add(left, top, width, height); // Adds 1 to item count.       //**************************************       lpDisp = chartobjects.Item( COleVariant((short)(1)) );  // It was           // zero, but just added one at a new location,           // with new left, top, width, and height.       ASSERT(lpDisp);       chartobject.AttachDispatch(lpDisp); // Use definition of new chart                                           // site.       chart.AttachDispatch(chartobject.GetChart());       //**************************************       lpDisp = sheet.GetRange(COleVariant("B3"), COleVariant("D4"));                         // Range containing the data to be charted.       ASSERT(lpDisp);       range.AttachDispatch(lpDisp);       var.pdispVal = lpDisp; // Contains IDispatch pointer                              // to the Source range.       chart.ChartWizard(var,                    // Source.                        COleVariant((short)11),  // Gallery = 3D Column.                        covOptional,             // Format, use default.                        COleVariant((short)2),   // PlotBy xlColumns.                        COleVariant((short)0),   // CategoryLabels.                        COleVariant((short)1),   // SeriesLabels.                        COleVariant((short)TRUE),  // HasLegend.                        COleVariant("Use by Flavor"),  // Title.                        COleVariant("Flavor"),    // CategoryTitle.                        COleVariant("Usage in Barrells"),  // ValueTitles.                        covOptional              // ExtraTitle.                        );       // The return is void.       ::Sleep(3000);       //Show the chart in Print Preview.       chart.PrintOut(COleVariant((short)1),     // From (page #).                      COleVariant((short)1),     // To (page #).                      COleVariant((short)1),     // Copies.                      COleVariant((short)TRUE),  // Preview.                      covOptional,               // ActivePrinter.                      covFalse,                  // PrintToFile.                      covFalse                   // Collate.                      covOptional                // PrToFileName // 2002 only                      );       book.SetSaved(TRUE); // Avoids the 'Save changes?' dialog box.       app.Quit(); // Excel departs.       // By default, the pointer references for the objects       // range, book, chart, chartobjects, sheet, and app       // are automatically released when they go out of scope.       // ReleaseDispatch()s are unnecessary.       ::Sleep(1000);       AfxMessageBox("Just executed App.Quit()");      }  // End of processing logic.      catch(COleException *e)      {        char buf[1024];        sprintf(buf, "COleException. SCODE: %08lx.", (long)e->m_sc);        ::MessageBox(NULL, buf, "COleException", MB_SETFOREGROUND | MB_OK);      }      catch(COleDispatchException *e)      {       char buf[1024];       sprintf(buf,               "COleDispatchException. SCODE: %08lx, Description: \"%s\".",               (long)e->m_wCode,               (LPSTR)e->m_strDescription.GetBuffer(1024));       ::MessageBox(NULL, buf, "COleDispatchException",                    MB_SETFOREGROUND | MB_OK);      }      catch(...)      {       ::MessageBox(NULL, "General Exception caught.", "Catch-All",                    MB_SETFOREGROUND | MB_OK);      }					
  5. Bạn có thể cần phải thay đổi mã trong CAutoProjectDlg::OnRun() để chỉ ra đường dẫn chính xác cho bảng tính của bạn Test.xls. The workbook tham chiếu trong dòng sau:
          lpDisp = books.open("C:\\Test", . . .);					
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
IDispatch đồ thị xl8 Excel 8,0 Excel97 xl97

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

Thuộc tính

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

Microsoft Foundation Class Library 4.2, Microsoft Office XP Developer Edition, Microsoft Office 2000 Developer Edition, Microsoft Excel 2002 Standard Edition

  • kbnosurvey kbarchive kbautomation kbhowto kbinterop kbmt KB178783 KbMtvi
Phản hồi