如何使用 MFC 自动化 Excel 2000 和 Excel 2002 和 Excel 2000 和 Excel 2002 的一个区域中获取一个数组

文章翻译 文章翻译
文章编号: 186122 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

本文演示了如何自动完成 Microsoft Excel 和到一个数组中返回多单元格范围中的值。

更多信息

若要返回 $ 多单元格范围中的 $ 值而无需查询单元格一个接一个,您必须返回一个 VARIANT 值使用 GetValue 成员函数的 Range 对象。您然后构造一个 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",然后退出 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 创建 Excel 图表
167668如何传递的字符串 safearray 之所以在 VARIANT *

属性

文章编号: 186122 - 最后修改: 2007年1月23日 - 修订: 5.1
这篇文章中的信息适用于:
  • Microsoft Excel 2000 标准版
  • Microsoft Visual C++ 5.0 企业版
  • Microsoft Visual C++ 6.0 企业版
  • Microsoft Visual C++ 5.0 专业版
  • Microsoft Visual C++ 6.0 专业版
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
  • Microsoft Excel 2002 标准版
  • Microsoft Excel 97 标准版
关键字:?
kbmt kbprogramming kbfunctions kbautomation kbhowto kbinterop KB186122 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 186122
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com