中易网

利用C++编程从TXT文档中提取数据生成EXCEL表格,求代码和注释

答案:2  悬赏:20  
解决时间 2021-02-26 22:31
利用C++编程从TXT文档中提取数据生成EXCEL表格,求代码和注释
最佳答案
只有java的-,-帮不到你。
全部回答
1、添加ole/com支持。 首先,应用程序必须添加对ole/com的支持,才能导入ole/com组件。 本文使用的是mfc对话框程序,在创建工程的向导中选中automation选项即可为程序自动添加相应的头文件和ole库初始化代码。 通过查看源代码,可以知道在stdafx.h的头文件中,添加了ole/com很多类所需添加的头文件。 #include // mfc 自动化类 同时,在应用程序类的initinstance函数中,添加了ole/com的初始化代码,如下所示: // 初始化 ole 库 if (!afxoleinit()) { afxmessagebox(idp_ole_init_failed); return false; } 2、导入并封装excel中的接口 excel作为ole/com库插件,定义好了各类交互的接口,这些接口是跨语言的接口。vc可以通过导入这些接口,并通过接口来对excel的操作。 由于本文只关心对excel表格中的数据的读取,主要关注几个_application、workbooks、_workbook、worksheets、_worksheet、range等几个接口。excel的各类接口的属性、方法可以通过msdn的office development进行查询。 vs2010导入ole/com组件的接口的步骤为:project->class wizard->add class->mfc class from typelib,先选择要导入的组件所在的路径,即excel.exe所在的路径,然后再选择 要导入的excel类型库中的接口。 在完成接口导入后,vs2010将自动为导入的接口创建相应的实现类,用于对接口属性和方法的实现。由于标准的c++没有属性访问器,只能添加一个两个存取函数来实现对属性的访问,通过在属性名称前加上get_和put_前缀分别实现对属性的读写操作。即,由vc自动完成c++类对接口的封装。 本文所导入的接口对应的类和头文件的说明如下所示: excel接口 导入类 头文件 说明 _application capplicaton application.h excel应用程序。 workbooks cworkbooks workbooks.h 工作簿的容器,里面包括了excel应用程序打开的所有工作簿。 _workbook cworkbook workbook.h 单个工作簿。 worksheets cworksheets worksheets.h 单个工作簿中的sheet表格的容器,包括该工作簿中的所有sheet。 _worksheet cworksheet worksheet.h 单个sheet表格。 range crange range.h 一定数量的单元格,可对单元格进行单个或多个单元格进行操作。 3、导入excel的整个类型库 接口对应类只是对接口的属性和方法进行了封装,而excel中的数据类型,如枚举类型却并为并不能使用,因此,为了更方便的操作excel,还需要导入excel的数据类型。 通过查看导入接口对应的头文件可以发现,在所有导入接口的头文件中,都会有这么行: #import "d:\\program files\\microsoft office\\office12\\excel.exe" no_namespace 这行代码的作用是导入excel整个类型库到工程中。 由vs2010自动产生的导入代码存在以下几个问题: (1)如果导入了多个接口,每个头文件都会把类型库导入一次,如果引用多个头文件,会导致类型库重复导入。 (2)excel类型库中有些类型会跟mfc类库的某些类型冲突。 (3)excel类型库的某些类型跟其他office和vb的某些库相关,如果不导入相关库,将导致这些类型无法使用。。 以上三点问题的解决方法如下: (1)仅在_application接口对应头文件中导入excel类型库。 (2)对冲突的类型进行重命名。 (3)在导入excel类型库之前,先导入office和vb的相关库。 更改后的导入类型库的代码如下: #import "c:\\program files\\common files\\microsoft shared\\office12\\mso.dll" \ rename("rgb", "msorgb") \ rename("documentproperties", "msodocumentproperties") using namespace office; #import "c:\\program files\\common files\\microsoft shared\\vba\\vba6\\vbe6ext.olb" using namespace vbide; #import "d:\\program files\\microsoft office\\office12\\excel.exe" \ rename("dialogbox", "exceldialogbox") \ rename("rgb", "excelrgb") \ rename("copyfile", "excelcopyfile") \ rename("replacetext", "excelreplacetext") \ no_auto_exclude using namespace excel; 编译程序后,会在debug或release目录下生成三个文件mso.tlh、vbe6ext.tlh和excel.tlh。通过打开文件可知,该三个文件的命名空间分别是office、vbide和excel。导入了excel的整个类型库后,就可以使用excel中的所有类型了。 4、操作excel步骤 操作excel的主要步骤如下: (1)创建一个excel应用程序。 (2)得到workbook的容器。 (3)打开一个workbook或者创建一个workbook。 (4)得到workbook中的worksheet的容器。 (5)打开一个worksheet或者创建一个worksheet。 (6)通过range对worksheet中的单元格进行读写操作。 (7)保存excel。 (8)释放资源。 5、批量处理excel表格 vc通过ole/com操作excel,是通过进程间的组件技术。因此,每次读写excel中的单元格时,都要进行进程间的切换。当数据量大,如果一个单元格一个单元格的读取,主要的时间都花费在进程切换中。因此读取多个单元格,将可有效的提高程序的运行效率。 对多个单元格的读写操作可以通过crange中以下两个成员函数来完成。 variant get_value2(); void put_value2(variant& newvalue); 其中,输入参数newvalue只要输入一个二维数组,即可实现向excel中一次写入多个单元格的值。 当然,在对crange类进行操作之前,要设置crange类对应的单元格。 6、excel表格的保存 (1)如果要保存打开的工作簿,使用cworkbook类的save函数就可以保存工作簿,原文件将被覆盖。 (2)如果是新创建的工作簿,或者是要另存为,可使用cworkbook类的saveas函数。 saveas的参数比较多。其中,第1个参数是设置要保存文件的路径;第2个参数是设置文件的格式,可在msdn中查看枚举类型xlfileformat来了解excel的文件格式。经过测试,在本文所用的测试环境中,excel2003的文件格式是xlexcel8,excel2007的文件格式是xlexcel4。 7、获取当前excel的版本 可以通过capplication的get_version函数来获得excel的版本,其中,excel2007的主版本号是12,excel2003的主版本号是11。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
陈意涵为什么哭
影视后期培训学校
中央空调风柜有多少型号?
我用电信卡开了QQVIP怎样取消呢?取消了话费
求一个实况足球8中午解说版的资金修改器
瑞济医院我想知道这个在什么地方
三级跳远的跳远过程是什么?
换了8g的内存卡后,下载的音乐格式都不正确了
怎样有效的恢复和培养自己的记忆力?
唐以后,丝绸之路的重要性逐渐被谁取代
连云港三和磁选设备有限公司地址有知道的么?
泰山经石峪的介绍
李白<静夜思>中的"床前"到底是什么地方?
上海乘邮轮去日本在哪里上船?
昆曲高速公路/龙泉北路(路口)地址在哪,我要
推荐资讯
大连交通软件学院是几本?
庵东工业园区西区我想知道这个在什么地方
炎热的夏天我只为你扇风的情侣网名
我显卡1060 i7处理器怎么玩虐杀原形还卡
想在电脑上做一个动感影集,怎么做?
l offen p一一一 with it
怎么可以消除苹果手机再搜索里面 只要打相关
有付字旁的字有哪些还能组哪些词语
好朋友与妻子闹离婚,我该怎么劝
我是广州的邮政银行卡。在佛山用广州的邮政银
樱桃MX-Board 8.0好不好,优缺点,樱桃 MX-Bo
分期付款的房子20年付清怎么意思么
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?