大一的程序设计老师,也是我们的班主任,一直想让我们知道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; } Excel::_ApplicationPtr pXL; if (FAILED(pXL.CreateInstance( "Excel.Application" ))) { cout << "Failed to initialize Excel::_Application!" << endl; return 0; } pXL->Workbooks->Open(L"111.xls" ); pXL->Visible = true ; Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet; Excel::RangePtr pRange = pWksheet->Cells; double value = pRange->Item[1][1]; pRange->Item[1][1] = 5.4321; pRange->Item[1][2] = 1.1211; pWksheet->SaveAs("112.xls" ); pXL->Quit(); return 0; }
虽然有很多自己不知道的东西,但是不影响我们使用这个技能,期间被有几句的最后的‘\’弄的快奔溃了,经过无数次尝试才知道它做换行符的时候后面必须什么都没有,包括空格,最后才成功了。
但是也有很多问题,比如说如果double value = pRange->Item[1][1],而那个单元格如果不是一个浮点数,那么程序就会报错,然后只能在任务管理器关掉excel了,暂时不知道怎么解决。
转载于http://blog.csdn.net/exsharp/article/details/25052777