VC——使用DLL的方式操作excel

写工具软件,一直和excel打交道,之前一直采用excel.cpp.excel.h直接添加到工程的方式来读写excel,现在由于要对代码进行单元测试,excel。cpp和excel.h文件中竟然有上万行代码,会引起很大的测试量,因此打算采用dll调用的方式来读写excel。

1. 首先从本机安装的office软件中导出DLL文件。

在程序的的stdafx.h中增加以下内容。文件路径修改为本机安装office的路径

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE14\\MSO.DLL"\

rename("RGB","MsoRGB") \

rename("SearchPath","MsoSearchPath")

#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB"

#import "C:\\Program Files (x86)\\Microsoft Office\\Office14\\EXCEL.EXE"\

rename("DialogBox","ExcelDialogBox") \

rename("RGB","ExcelRGB") \

rename("CopyFile","ExcelCopyFile") \

rename("ReplaceText","ExcelReplaceText") \

exclude("IFont","IPicture") no_dual_interfaces

然后运行一下软件,就可以得到EXCEL.tlh,EXCEL.tli,MSO.tlh,MSO.tli,VBE6EXT.tlh,VBE6EXT.tli等文件了。

2.读取EXCEL

先在要操作excel的文件的头部添加using namespace Excel;表明要使用excel的类库

bool readExcel(CString strFileName)

{

CoInitialize(NULL); //初始化

Excel::_ApplicationPtr ExcelApp;

Excel::_WorkbookPtr Excelbook;

Excel::WorksheetsPtr Excelsheets;

Excel::_WorksheetPtr  sheet;

HRESULT hr = ExcelApp.CreateInstance(L"Excel.Application");

ASSERT(SUCCEEDED(hr));

ExcelApp->Visible = false;         //使Excel不可见

ExcelApp->UserControl = true;      //允许其它用户控制Excel

ExcelApp->DisplayAlerts = false;  //不弹出提示

Excelbook = ExcelApp->Workbooks->Open(LPCTSTR(strFileName));

Excelsheets = Excelbook->Worksheets;

int shtCount = Excelsheets->Count;

//////////////////////////////////////////////////////////////////////////

for (short k = 1; k <= shtCount; k++)

{

sheet = Excelsheets->Item[k];

if (sheet != NULL)

{

CString sheetName = LPCTSTR(sheet->GetName());

Excel::RangePtr rgMyRge;

rgMyRge= sheet->Cells;

Excel::RangePtr usedRange,cell;

usedRange = sheet->UsedRange;

rgMyRge = usedRange->Rows;

long iRowNum = rgMyRge->Count;

rgMyRge = usedRange->Columns;

long iColNum = rgMyRge->Count;

rgMyRge = sheet->GetRange(_bstr_t(_T("A1")));

for(int m = 2;m<iRowNum;m++)

{

for(int j = 1; j<iColNum; j++)

{

cell = rgMyRge->GetItem(_variant_t( (long)(m)), _variant_t( (long)j)).pdispVal;

CString  strItemName = cell->GetText().bstrVal;//strItemName就是读取到的内容

}

}

}

}

Excelbook->Close(VARIANT_TRUE);

ExcelApp->Quit();

return true;

}

时间: 2024-11-07 10:03:19

VC——使用DLL的方式操作excel的相关文章

VC通过OLE/COM对象操作EXCEL

vc通过excel的COM接口来操作EXCEL时,功能比较强大,可以对EXCEL进行表格的几乎所有操作,在操作时如果利用SAFEARRAY数组,性能也会大幅度提升. 但是有一个问题,在操作完EXCEL后,资源释放以后,EXCEL进程怎么也关不掉!!!我尝试了很多种办法,都无效,最后无意间发现导致EXCEL进程不能关闭的原因是,EXCEL中加载了第三方的COM组件(我的是金山杀毒的EXCEL加载项引起的),查找EXCEL加载项的方法是(excel2010版本): 点击[文件]---[选项]---[

VC++中使用ADO方式操作ACCESS数据库

ADO(ActiveX Data Object)是Microsoft数据库应用程序开发的新接口,是建立在OLE DB之上的高层数据库访问技术,即使你对OLE DB,COM不了解也能轻松对付ADO,因为它非常简单易用,甚至比你以往所接触的ODBC API.DAO.RDO都要容易使用,并不失灵活性.本文详细地介绍在Visual C++开发环境下如何使用ADO来进行数据库应用程序开发,并给出示例代码.为了使读者朋友都能测试本例提供的代码,我们采用Access数据库,您可以直接在我们提供的示例代码中找到

Python操作excel的几种方式--xlrd、xlwt、openpyxl

openpyxl xlrd xlwt 在处理excel数据时发现了xlwt的局限性–不能写入超过65535行.256列的数据(因为它只支持Excel 2003及之前的版本,在这些版本的Excel中行数和列数有此限制),这对于实际应用还是不够的.为此经过一番寻找发现了一个支持07/10/13版本Excel的openpyxl,虽然功能很强大,但是操作起来感觉没有xlwt方便.下面分别说下几个模块的常用操作. xlrd xlrd是用来从Excel中读写数据的,但我平常只用它进行读操作,写操作会遇到些问

MFC:使用ODBC操作EXCEL表

方案一:利用现成的第三方库:CSpreadSheet 使用CSpreadSheet操作EXCEL的局限性:你只能够在EXCEL中创建表,然后才能够采用ODBC的方式操作EXCEL表,否则查询语句中FROM后面的表名称无法填写. 限制 该控件需要MFC(微软基础类库)支持.未测试是否支持Unicode编码.控件以ODBC读写 Excel文件,需要ODBC驱动程序.Excel文件必须列标记.且首行列标记唯一(字段).禁止 删除工作簿,仅允许删除工作簿内容.列值类型参照程序数据类型.不采用Excel格

ABAP学习(8):操作EXCEL

ABAP操作EXCEL 1.EXCEL导入内表 方式1: 调用function,’F4_FILENAME’获取文件名.通过屏幕元素Prameter的帮助事件,弹出文件选择框,获取选择文件名. 调用function,’TEXT_CONVERT_XLS_TO_SAP’,将选择excel数据放入内表. 示例: TYPE-POOLS truxs. DATA:it_raw TYPE truxs_t_text_data. "定义一个内表来存储数据,内表的列数和要传得数据的列数要相同,其按照列来匹配传值 DA

如何使用SAP Intelligent Robotic Process Automation自动操作Excel

今天是鼠年正月十二.这是Jerry鼠年的第11篇文章,也是汪子熙公众号总共第210篇原创文章. 之前Jerry的文章 使用ABAP操作Excel的几种方法,介绍的是通过ABAP这门编程语言去操作Excel的方法. 除了编程语言之外,SAP新发布的SAP Intelligent Robotic Process Automation(简称SAP iRPA),提供了强大的企业级自动化流程解决方案,善加利用,可以在不需要编程的情况下,像使用编程语言一样灵活地操作Excel. 我们来看个具体而又简单的例子

VC++操作Excel

摘要:使用Microsoft Office所带的控件来实现代码操作excel表格. 开发环境:操作系统是Microsoft Windows7 32bit,Office办公套装是Microsoft Office 2003,编程环境是Microsoft Visual Studio 6.0. 使用背景:我最近有个项目中要生成报表,是将数据库中的发证数据查询出来导出到Excel表格中以便打印,所以上网找了这方面的内容,具体内容如下,如错误还请指证. 从平常我们操作一般文件上来看,无非是打开文件,操作文件

OleContainer操作Excel以二进制方式读写数据库

需求源头:OleContainer操作Excel,想把Excel以二进制方式存入数据库,并且以二进制方式读取存入流:Procedure SaveToStream(ADOTable1: TAdoTable)var  vStream: TMemoryStream;begin try   try    vStream := TMemoryStream.Create;    vStream.Clear;    OleContainer1.SaveToStream(vStream);    vStream

POI操作Excel详解,HSSF和XSSF两种方式

HSSF方式: package com.tools.poi.lesson1; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.