从 MFC 和 Visual C++ 自动执行 Excel,以使用数组填充或获取数据

您所在的位置:网站首页 mfc操作excel单元格 从 MFC 和 Visual C++ 自动执行 Excel,以使用数组填充或获取数据

从 MFC 和 Visual C++ 自动执行 Excel,以使用数组填充或获取数据

2024-05-16 14:07| 来源: 网络整理| 查看: 265

如何从 MFC 和 Visual C++ 2005 或 Visual C++ .NET 自动执行 Excel,以使用数组填充或获取区域中的数据 项目06/20/2023 适用于: Microsoft Excel

有关本文的 Microsoft C# .NET 版本,请 参阅302096。 有关本文的 Microsoft Visual Basic .NET 版本,请 参阅302094。

注意

Microsoft Visual C++ 2005、Microsoft Visual C++ .NET 2003 和 Microsoft Visual C++ .NET 2002 支持 Microsoft .NET Framework提供的托管代码模型和非托管本机 Microsoft Windows 代码模型。 本文中的信息仅适用于非托管的 Visual C++ 代码。

摘要

本分步文章演示如何从 Visual C++ 2005 或 Visual C++ .NET 自动执行 Microsoft Excel,以使用数组填充和检索多单元格范围内的值。

创建适用于 Excel 的自动化客户端

若要填充多单元格区域,而无需一次填充一个单元格,可以将 Range 对象的 Value 属性设置为二维数组。 同样,也可以使用 Value 属性一次性检索多个单元格的二维值数组。 以下步骤演示了使用二维数组设置和检索数据的过程。

按照以下 Microsoft 知识库文章的“创建自动化客户端”部分中的步骤创建基本自动化客户端:

307473 如何使用 Visual C++ .NET 中的 Office 自动化类型库

在步骤 3 中,向窗体添加第二个按钮和复选框。 将按钮的 ID 更改为IDC_GETVALUES,将标题更改为“获取值”。 将复选框的 ID 更改为IDC_CHECK,将标题更改为“用字符串填充”。

在文章的步骤 4 中,如果要从 Office XP 自动执行 Excel 2002,请选择“Microsoft Excel 10.0 对象库”。 Excel 2002 的默认位置是 C:\Program Files\Microsoft Office\Office10\Excel.exe。 或者,如果要自动化 Microsoft Office Excel 2003,请选择“Microsoft Excel 11.0 对象库”。 Excel 2003 的默认位置是 C:\Program Files\Microsoft Office\Office11\Excel.exe。 选择以下 Microsoft Excel 接口:

_应用 _练习 册 _Worksheet 范围 工作簿 工作表

在步骤 6 中,直接在 Autoprojectdlg.h 中#pragma一次指令后添加以下#include语句:

#include "CApplication.h" #include "CRange.h" #include "CWorkbook.h" #include "CWorkbooks.h" #include "CWorksheet.h" #include "CWorksheets.h"

将以下两个公共成员变量添加到 CAutoProjectDlg 类:

CApplication oExcel; CWorkbook oBook;

在对话框中,右键单击IDC_CHECK,然后选择“添加变量”。 将变量命名为m_bFillWithStrings,然后单击“完成”。

在对话框中,双击“运行”并替换以下代码

void CAutoProjectDlg::OnBnClickedRun() { // TODO: Add your control notification handler code here }

与:

void CAutoProjectDlg::OnBnClickedRun() { CWorkbooks oBooks; CWorksheets oSheets; CWorksheet oSheet; CRange oRange; COleVariant covOptional(DISP_E_PARAMNOTFOUND,VT_ERROR); // If you have not created Excel, create a new instance. if (oExcel.m_lpDispatch == NULL) { oExcel.CreateDispatch("Excel.Application"); } // Show Excel to the user. oExcel.put_Visible(TRUE); oExcel.put_UserControl(TRUE); // Add a new workbook and get the first worksheet in that book. oBooks = oExcel.get_Workbooks(); oBook = oBooks.Add(covOptional); oSheets = oBook.get_Worksheets(); oSheet = oSheets.get_Item(COleVariant((short)1)); // Get a range of data. oRange = oSheet.get_Range(COleVariant("A1"),covOptional); oRange = oRange.get_Resize(COleVariant((short)5),COleVariant((short)5)); COleSafeArray saRet; DWORD numElements[2]; numElements[0] = 5; numElements[1] = 5; long index[2]; // Create a BSTR or double safe array. if (m_bFillWithStrings.GetCheck()) saRet.Create(VT_BSTR,2,numElements); else saRet.Create(VT_R8,2,numElements); // Fill the array with data. for (int iRow = 1; iRow


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3