用C++操作Excel

来源:互联网 发布:杭州网络作家村 编辑:程序博客网 时间:2024/06/16 15:14

   大一的程序设计老师,也是我们的班主任,一直想让我们知道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几年的英语= =。

[cpp] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. #include <iostream>   
  2. #import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\OFFICE15\\MSO.DLL" \  
  3.     rename("RGB""MSORGB")  
  4. using namespace Office;  
  5. #import "C:\\Program Files (x86)\\Common Files\\microsoft shared\\VBA\\VBA6\\VBE6EXT.OLB"    
  6. using namespace VBIDE;  
  7. #import "D:\\Microsoft Office\\Office15\\EXCEL.EXE" \  
  8.     rename("DialogBox""ExcelDialogBox") \  
  9.     rename("RGB""ExcelRGB") \  
  10.     rename("CopyFile""ExcelCopyFile") \  
  11.     rename("ReplaceText""ExcelReplaceText") \  
  12.     exclude("IFont""IPicture") no_dual_interfaces  
  13. using namespace std;  
  14. int main()  
  15. {  
  16.     HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);  
  17.     if (FAILED(hr))  
  18.     {  
  19.         cout << "Failed to initialize COM library. Error code = 0x"  
  20.             << hex << hr << endl;  
  21.         return hr;  
  22.     }  
  23.   
  24.     // Create Excel Application Object pointer  创建一个Excel文件指针  
  25.     Excel::_ApplicationPtr pXL;  
  26.   
  27.     if (FAILED(pXL.CreateInstance("Excel.Application")))  
  28.     {  
  29.         cout << "Failed to initialize Excel::_Application!" << endl;  
  30.         return 0;  
  31.     }  
  32.   
  33.     // Open the Excel Workbook, but don't make it visible  打开一个工作页  
  34.     pXL->Workbooks->Open(L"111.xls");  
  35.     pXL->Visible = true;   //如果为true,可以看到程序执行的过程,类似于我们手工操作,false就是它后台自己执行  
  36.   
  37.     // Access Excel Worksheet and return pointer to Worksheet cells    
  38.     Excel::_WorksheetPtr pWksheet = pXL->ActiveSheet;  
  39.     Excel::RangePtr pRange = pWksheet->Cells;  
  40.   
  41.     // Read an Excel data cell. (Note Excel cells start from index = 1)    
  42.     double value = pRange->Item[1][1];  
  43.   
  44.     // Write/modify Excel data cells + save. (reopen xls file to verify)    
  45.     pRange->Item[1][1] = 5.4321;  
  46.     pRange->Item[1][2] = 1.1211;  
  47.   
  48.     pWksheet->SaveAs("112.xls");  
  49.     // Exit the Excel Com object    
  50.     pXL->Quit();  
  51.     return 0;  
  52. }  
        虽然有很多自己不知道的东西,但是不影响我们使用这个技能,期间被有几句的最后的‘\’弄的快奔溃了,经过无数次尝试才知道它做换行符的时候后面必须什么都没有,包括空格,最后才成功了。
        但是也有很多问题,比如说如果double value = pRange->Item[1][1],而那个单元格如果不是一个浮点数,那么程序就会报错,然后只能在任务管理器关掉excel了,暂时不知道怎么解决。
转载于http://blog.csdn.net/exsharp/article/details/25052777
0 0