用C++操作Excel

        大一的程序设计老师,也是我们的班主任,一直想让我们知道C/C++究竟能做些什么,曾经花整整1节课的时间教我们如何找一个问题的解决方案。他告诉我们,要懂得google。不过,对于习惯了baidu的我,一时间总是改不过来。但是,经过这段时间,确实知道了虽然偶尔连不上服务器的google确实比baidu好。

        大一下学期有各种各样的物理实验,数据多,而且不能凑整,公式也很繁,于是,决定用C++来处理这些数据。一开始是用txt文件处理,但是不够直观,于是,想起我们班主任第一天给我们演示“C语言能做什么”时用C操作excel,于是,自个儿也来尝试下。

        网上教程很多,但是大部分都是用MFC还是什么的,太麻烦。后来,不知道哪里冒出了一个关键词com组件,深搜之,最后得到了这个:

        http://www.technical-recipes.com/2012/how-to-interface-with-excel-in-c/

        整体还是不难懂的,毕竟学了10几年的英语= =。

#include <iostream> 
#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE15\\MSO.DLL" \
	rename("RGB", "MSORGB")
using namespace Office;
#import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB"  
using namespace VBIDE;
#import "D:\\Microsoft Office\\Office15\\EXCEL.EXE" \
	rename("DialogBox", "ExcelDialogBox") \
	rename("RGB", "ExcelRGB") \
	rename("CopyFile", "ExcelCopyFile") \
	rename("ReplaceText", "ExcelReplaceText") \
	exclude("IFont", "IPicture") no_dual_interfaces
using namespace std;
int main()
{
	HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
	if (FAILED(hr))
	{
		cout << "Failed to initialize COM library. Error code = 0x"
			<< hex << hr << endl;
		return hr;
	}

	// Create Excel Application Object pointer  创建一个Excel文件指针
	Excel::_ApplicationPtr pXL;

	if (FAILED(pXL.CreateInstance("Excel.Application")))
	{
		cout << "Failed to initialize Excel::_Application!" << endl;
		return 0;
	}

	// Open the Excel Workbook, but don't make it visible  打开一个工作页
	pXL->Workbooks->Open(L"111.xls");
	pXL->Visible = true;   //如果为true,可以看到程序执行的过程,类似于我们手工操作,false就是它后台自己执行

	// Access Excel Worksheet and return pointer to Worksheet cells  
	Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet;
	Excel::RangePtr pRange = pWksheet->Cells;

	// Read an Excel data cell. (Note Excel cells start from index = 1)  
	double value = pRange->Item[1][1];

	// Write/modify Excel data cells + save. (reopen xls file to verify)  
	pRange->Item[1][1] = 5.4321;
	pRange->Item[1][2] = 1.1211;

	pWksheet->SaveAs("112.xls");
	// Exit the Excel Com object  
	pXL->Quit();
	return 0;
}
        虽然有很多自己不知道的东西,但是不影响我们使用这个技能,期间被有几句的最后的‘\’弄的快奔溃了,经过无数次尝试才知道它做换行符的时候后面必须什么都没有,包括空格,最后才成功了。
        但是也有很多问题,比如说如果double value = pRange->Item[1][1],而那个单元格如果不是一个浮点数,那么程序就会报错,然后只能在任务管理器关掉excel了,暂时不知道怎么解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值