如何使用 MFC 來自動化 Excel 2000 和 Excel 2002 和取得陣列從 Excel 2000 和 Excel 2002 中的範圍

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:186122
本文已封存。本文係以「現狀」提供且不會再更新。
結論
本文將告訴您,如何自動化 Microsoft Excel,並從多重儲存格的範圍傳回值陣列。
其他相關資訊
若要傳回從多重儲存格範圍的值,不需查詢一個接一個儲存格,您必須使用 GetValue 成員函式的 Range 物件傳回值到一個 VARIANT。然後您可以建構 SAFEARRAY,根據從 GetValue 傳回的 VARIANT。一旦將 SAFEARRAY 可以存取使用 GetElement 項目。下列步驟說明這個程序,並示範如何存取字串和數值的項目。

自動化 Microsoft Excel 2000 與 2002年的附註

本文中的範例程式碼使用從 Excel 97 物件程式庫 (Excel 8.olb) 產生的類別包裝函式。稍微修改與這個程式碼可套用至 Excel 2000 (Excel9.olb) 或 Excel 2002 (Excel.olb) 可使用類別包裝函式的自動化用戶端。 如需有關使用 Microsoft Excel 2000 或 2002年型別程式庫本文所述的程式碼範例的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
224925資訊: 因為新發行的版本,可能會變更 Office 的型別程式庫

建立專案的步驟

  1. 在 Microsoft Excel 中建立新的活頁簿。填入儲存格 A1:C8 與混合的字串和數值資料]。儲存活頁簿作為 c:\test.xls 」,結束 Microsoft Excel。
  2. 請遵循步驟 1 到 12 下列的文件中若要建立範例專案使用 [IDispatch 介面和成員函式定義 Excel8.olb 型別程式庫中 「 Microsoft 知識庫中:
    178749如何建立使用 MFC 和型別程式庫的自動化專案
  3. AutoProjectDlg.cpp 檔案頂端加入下列行:
          #include "excel8.h"					
  4. 將下列程式碼加入至 CAutoProjectDlg::OnRun() AutoProjectDlg.cpp 檔案中:

    範例程式碼

          // OLE Variant for Optional.      COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);      _Application objApp;      _Workbook objBook;      Workbooks objBooks;      Worksheets objSheets;      _Worksheet objSheet;      Range objRange;      VARIANT ret;      // Instantiate Excel and open an existing workbook.      objApp.CreateDispatch("Excel.Application");      objBooks = objApp.GetWorkbooks();      objBook = objBooks.Open("C:\\Test.xls",                VOptional, VOptional, VOptional, VOptional,                VOptional, VOptional, VOptional, VOptional,                VOptional, VOptional, VOptional, VOptional);      objSheets = objBook.GetWorksheets();      objSheet = objSheets.GetItem(COleVariant((short)1));      //Get the range object for which you wish to retrieve the      //data and then retrieve the data (as a variant array, ret).      objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C8"));      ret = objRange.GetValue();      //Create the SAFEARRAY from the VARIANT ret.      COleSafeArray sa(ret);      //Determine the array's dimensions.      long lNumRows;      long lNumCols;      sa.GetUBound(1, &lNumRows);      sa.GetUBound(2, &lNumCols);      //Display the elements in the SAFEARRAY.      long index[2];      VARIANT val;      int r, c;      TRACE("Contents of SafeArray\n");      TRACE("=====================\n\t");      for(c=1;c<=lNumCols;c++)      {         TRACE("\t\tCol %d", c);      }      TRACE("\n");      for(r=1;r<=lNumRows;r++)      {         TRACE("Row %d", r);         for(c=1;c<=lNumCols;c++)         {            index[0]=r;            index[1]=c;            sa.GetElement(index, &val);            switch(val.vt)            {            case VT_R8:               {                  TRACE("\t\t%1.2f", val.dblVal);                  break;               }            case VT_BSTR:               {                  TRACE("\t\t%s",(CString)val.bstrVal);                  break;               }            case VT_EMPTY:               {                  TRACE("\t\t<empty>");                  break;               }            }         }         TRACE("\n");      }      //Close the workbook without saving changes      //and quit Microsoft Excel.      objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);      objApp.Quit();					
  5. 編譯專案並執行它。
  6. 按一下 [執行]。在儲存格 A1:C8 值將會顯示 [輸出] 視窗。
参考
取得更多資訊有關自動化使用 MFC 的 Microsoft Excel 請按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
186120如何使用 MFC 來自動化 Excel 並填入陣列的範圍
184663如何內嵌和自動化與 MFC 的 Microsoft Excel 工作表
179706如何使用 MFC 來自動化 Excel 和建立/格式新的活頁簿
178781HOWTO: 自動化 Excel 使用 MFC 和工作表函數
178783HOWTO: 使用 MFC 來建立 Microsoft Excel 圖表
167668如何將傳入的字串 SafeArray VARIANT *

警告:本文為自動翻譯

內容

文章識別碼:186122 - 最後檢閱時間:12/05/2015 08:42:09 - 修訂: 5.1

Microsoft Excel 2000 Standard Edition, Microsoft Visual C++ 5.0 Enterprise Edition, Microsoft Visual C++ 6.0 Enterprise Edition, Microsoft Visual C++ 5.0 Professional Edition, Microsoft Visual C++ 6.0 Professional Edition, Microsoft Visual C++, 32-bit Learning Edition 6.0, Microsoft Excel 2002 Standard Edition, Microsoft Excel 97 Standard Edition

  • kbnosurvey kbarchive kbmt kbprogramming kbfunctions kbautomation kbhowto kbinterop KB186122 KbMtzh
意見反應