Excel 3

 SDK程序,没有用MFC。  
  用的是excel2003  
  //   StatisticsGen.cpp   :   Defines   the   entry   point   for   the   console   application.  
  //  
   
  #include   "stdafx.h"  
   
  int   _tmain(int   argc,   _TCHAR*   argv[])  
  {  
  // Dispatch   interface  
  IDispatch *pDispExcel;  
  // Temporary   variable   to   hold   names.  
  unsigned   short *ucPtr;  
  // ClSID   of   excel  
  CLSID clsidExcel;  
  // Return   value  
  HRESULT hr;  
   
   
  // Initialize   OLE   Libraries.  
  OleInitialize(NULL);  
   
   
  // Get   CLSID   for   Excel.Application   from   registry.  
  hr   =   CLSIDFromProgID(L"Excel.Application",   &clsidExcel);  
  if   (   FAILED(hr)   )  
  {  
  MessageBox(NULL,   "Excel   not   registered.",   "Error",   MB_OK);  
  goto   __exit;  
  }  
   
  ///  
  // Start   excel   and   get   its   IDispatch   pointer.  
  hr   =   CoCreateInstance(clsidExcel,   NULL,   CLSCTX_LOCAL_SERVER,   IID_IDispatch,   (void**)&pDispExcel);  
  if   (   FAILED(hr)   )  
  {  
  MessageBox(NULL,   "Couldn't   start   Excel.",   "Error",   MB_OK);  
  goto   __exit;  
  }  
   
  ///  
  // Get   the   'visible'   property's   DISPID.  
  DISPPARAMS dispParamsVisible   =   {   NULL,   NULL,   0,   0};  
  VARIANT parmVisible;  
  DISPID dispidNamed   =   DISPID_PROPERTYPUT;  
  DISPID dispVisible;  
   
  ucPtr   =   L"Visible";  
  pDispExcel->GetIDsOfNames(IID_NULL,   &ucPtr,   1,   LOCALE_USER_DEFAULT,   &dispVisible);  
   
  // Initialize   parameters   to   set   visible   property   to   true.  
  VariantInit(&parmVisible);  
  parmVisible.vt   =   VT_I4;  
  parmVisible.llVal   =   1;  
   
  //   One   argument.  
  dispParamsVisible.cArgs   =   1;  
  dispParamsVisible.rgvarg   =   &parmVisible;  
   
  // Handle   special-case   for   property-puts!  
  dispParamsVisible.cNamedArgs =   1;  
  dispParamsVisible.rgdispidNamedArgs =   &dispidNamed;  
   
  // Set   'visible'   property   to   true.  
  hr   =   pDispExcel->Invoke(dispVisible,   IID_NULL,   LOCALE_SYSTEM_DEFAULT,     DISPATCH_PROPERTYPUT   |   DISPATCH_METHOD,  
  &dispParamsVisible,   NULL,   NULL,   NULL);  
  VariantClear(&parmVisible);  
   
  if(FAILED(hr))    
  {  
  MessageBox(NULL,   "Set   visible!",   "Failed!",   MB_OK);  
  goto   __exit;  
  }  
   
   
  /  
  OLECHAR*   szGetBooks   =   L"Workbooks";    
  DISPID dispGetWorkbooks;  
  VARIANT   varBooks;  
   
  hr   =   pDispExcel->GetIDsOfNames(IID_NULL,   &szGetBooks,   1,   LOCALE_USER_DEFAULT,   &dispGetWorkbooks);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  DISPPARAMS   dispParamsForGetBooks   =   {   NULL,   NULL,   0,   0};  
  hr   =   pDispExcel->Invoke(dispGetWorkbooks,   IID_NULL,   LOCALE_SYSTEM_DEFAULT,     DISPATCH_PROPERTYGET   |   DISPATCH_METHOD,  
  &dispParamsForGetBooks,   &varBooks,   NULL,   NULL);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
   
  ///  
  // Open  
  IDispatch*   pDispBooks;  
  IDispatch*   pDispBook;  
   
  if   (   varBooks.vt   !=   VT_DISPATCH)  
  goto   __exit;  
  else  
  {  
  // Get   workbooks   dispatch   interface  
  pDispBooks   =   varBooks.pdispVal;  
   
  // Open  
  VARIANT   varRetBook;  
  VARIANTARG   varg;  
  varg.vt   =   VT_BSTR;  
  varg.bstrVal   =   _bstr_t("c://bool.xls");  
   
  DISPPARAMS   dpOpen=   {   &varg,   NULL,   1,   0   };  
   
  LPOLESTR   lpOpen   =   L"Open";  
  DISPID   dispOpen;  
   
  hr   =   pDispBooks->GetIDsOfNames(IID_NULL,   &lpOpen,   1,   LOCALE_USER_DEFAULT,   &dispOpen);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  hr   =   pDispBooks->Invoke(dispOpen,   IID_NULL,   LOCALE_SYSTEM_DEFAULT,   DISPATCH_PROPERTYGET   |   DISPATCH_METHOD,  
  &dpOpen,   &varRetBook,   NULL,   NULL);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
   
  if   (   varRetBook.vt   !=   VT_DISPATCH   )  
  goto   __exit;  
  else  
  pDispBook   =   varRetBook.pdispVal;  
  }   
 

 

 

//   worksheets  
  IDispatch*   pDispSheets;  
  if   (   pDispBook   !=   NULL   )  
  {  
  DISPPARAMS   dpSheets   =   {NULL,   NULL,   0,   0};  
  DISPID dispSheets;  
  LPOLESTR   lpSheets   =   L"Worksheets";  
  VARIANT   varRetSheets;  
   
  hr   =   pDispBook->GetIDsOfNames(IID_NULL,   &lpSheets,   1,   LOCALE_USER_DEFAULT,   &dispSheets);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  hr   =   pDispBook->Invoke(dispSheets,   IID_NULL,   LOCALE_SYSTEM_DEFAULT,   DISPATCH_PROPERTYGET   |   DISPATCH_METHOD,  
  &dpSheets,   &varRetSheets,   NULL,   NULL);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
   
  if   (   varRetSheets.vt   !=   VT_DISPATCH   )  
  goto   __exit;  
  else  
  pDispSheets   =   varRetSheets.pdispVal;  
  }  
   
  ///  
  // worksheet  
  IDispatch*   pDispSheet;  
  if   (   pDispSheets   !=   NULL   )  
  {  
  VARIANT     varRetSheet;  
   
  VARIANTARG   vargSheet;  
  vargSheet.vt   =   VT_I4;  
  vargSheet.intVal   =   1;  
   
  DISPPARAMS dpSheet   =   {   &vargSheet,   NULL,   1,   0   };  
   
  LPOLESTR   lpSheet   =   L"Item";  
  DISPID dispSheet;  
   
  hr   =   pDispSheets->GetIDsOfNames(IID_NULL,   &lpSheet,   1,   LOCALE_USER_DEFAULT,   &dispSheet);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  hr   =   pDispSheets->Invoke(dispSheet,   IID_NULL,   LOCALE_USER_DEFAULT,   DISPATCH_PROPERTYGET   |   DISPATCH_METHOD,    
  &dpSheet,   &varRetSheet,   NULL,   NULL);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
   
  if   (   varRetSheet.vt   !=   VT_DISPATCH   )  
  goto   __exit;  
  else  
  pDispSheet   =   varRetSheet.pdispVal;  
  }  
   
  ///  
  IDispatch*   pDispRange;  
  if   (   pDispSheet   !=   NULL   )  
  {  
  LPOLESTR   lpCells   =   L"Cells";  
  DISPPARAMS   dpCells   =   {   NULL,   NULL,   0,   0   };  
  DISPID   dispCells;  
  VARIANT   varRetRange;  
   
  hr   =   pDispSheet->GetIDsOfNames(IID_NULL,   &lpCells,   1,   LOCALE_USER_DEFAULT,   &dispCells);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  hr   =   pDispSheet->Invoke(dispCells,   IID_NULL,   LOCALE_USER_DEFAULT,     DISPATCH_PROPERTYGET   |   DISPATCH_METHOD,  
  &dpCells,   &varRetRange,   NULL,   NULL);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
   
  if   (   varRetRange.vt   !=   VT_DISPATCH   )  
  goto   __exit;  
  else  
  pDispRange   =   varRetRange.pdispVal;  
  }  
   
  ///  
  // put   value   in   Item   property  
  if   (   pDispRange   !=   NULL   )  
  {  
  LPOLESTR   lpRangeItem   =   L"Item";  
  DISPID   dispRangeItem;  
   
  hr   =   pDispRange->GetIDsOfNames(IID_NULL,   &lpRangeItem,   1,   LOCALE_USER_DEFAULT,   &dispRangeItem);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
   
  VARIANT*   vargRangeItem   =   new   VARIANT[3];  
   
  for   (   int   i   =   0;   i   <   3;   i   ++   )  
  VariantInit(&vargRangeItem[i]);  
   
  vargRangeItem[0].vt   =   VT_I4;  
  vargRangeItem[0].intVal   =   1;  
  vargRangeItem[1].vt   =   VT_I4;  
  vargRangeItem[1].intVal   =   1;  
  vargRangeItem[2].vt   =   VT_I4;  
  vargRangeItem[2].intVal   =   1;  
   
  DISPPARAMS   dpRangeItem   =   {NULL,   NULL,   0,   0};  
  dpRangeItem.cArgs   =   3;  
  dpRangeItem.rgvarg   =   vargRangeItem;  
  dpRangeItem.cNamedArgs   =   1;  
  DISPID   dispIDRangeItem   =   DISPID_PROPERTYPUT;  
  dpRangeItem.rgdispidNamedArgs   =   &dispIDRangeItem;  
   
  EXCEPINFO   except;  
   
  hr   =   pDispRange->Invoke(dispRangeItem,   IID_NULL,   LOCALE_USER_DEFAULT,   DISPATCH_PROPERTYPUT   |   DISPATCH_METHOD,  
  &dpRangeItem,   NULL,   &except,   NULL);  
   
  delete   []vargRangeItem;  
   
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  }  
   
  ///  
  // Save  
  if   (   pDispBook   )  
  {  
  LPOLESTR   lpBookSave   =   L"Save";  
  DISPID   dispIDBookSave;  
   
  hr   =   pDispBook->GetIDsOfNames(IID_NULL,   &lpBookSave,   1,   LOCALE_USER_DEFAULT,   &dispIDBookSave);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  DISPPARAMS   dispBookSave   =   {   NULL,   NULL,   0,   0   };  
   
  hr   =   pDispBook->Invoke(dispIDBookSave,   IID_NULL,   LOCALE_USER_DEFAULT,   DISPATCH_METHOD,   &dispBookSave,   NULL,   NULL,   NULL);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
  }  
   
  ///  
  // quit  
  if   (   pDispExcel   )  
  {  
  LPOLESTR   lpExcelQuit   =   L"Quit";  
  DISPID   dispIDExcelQuit;  
   
  hr   =   pDispExcel->GetIDsOfNames(IID_NULL,   &lpExcelQuit,   1,   LOCALE_USER_DEFAULT,   &dispIDExcelQuit);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
   
  DISPPARAMS   dispExcelQuit   =   {   NULL,   NULL,   0,   0   };  
   
  hr   =   pDispExcel->Invoke(dispIDExcelQuit,   IID_NULL,   LOCALE_USER_DEFAULT,   DISPATCH_METHOD,   &dispExcelQuit,  
  NULL,   NULL,   NULL);  
  if   (   FAILED(hr)   )  
  goto   __exit;  
   
  }  
   
  __exit:  
  if   (   pDispRange   )  
  pDispRange->Release();  
   
  if   (   pDispSheet   )  
  pDispSheet->Release();  
   
  if   (   pDispSheets   )  
  pDispSheets->Release();  
   
  if   (   pDispBook   )  
  pDispBook->Release();  
   
  if   (   pDispBooks   )  
  pDispBooks->Release();  
   
  if   (   pDispExcel   )  
  pDispExcel->Release();  
   
  OleUninitialize();  
   
  return   0;  
  }  

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: NativeExcel3 是一个用于操作 Excel 文件的第三方库。它是对原生 Excel 对象模型的封装和扩展,可以在不依赖于 Excel 程序的情况下,通过编程方式读取、写入和操作 Excel 文件。 使用 NativeExcel3,我们可以方便地进行以下操作: 1. 读取 Excel 文件:可以通过指定文件路径或流的方式打开 Excel 文件,并读取其中的数据内容,例如单元格的文本、数值等。可以按照行、列或特定范围来进行读取,获取所需数据。 2. 写入 Excel 文件:可以创建新的 Excel 文件,并根据需求进行单元格的写入操作。可以设置单元格的格式、样式等内容,并可以插入图片或图表等元素。同时还可以设置单元格的合并、拆分、隐藏等功能。 3. 修改 Excel 文件:可以对已有的 Excel 文件进行修改,包括插入、删除、移动、复制单元格或行列等操作。还可以对已有的图表、公式进行编辑和更新。 4. 导出 Excel 文件:将程序中生成或处理好的数据导出为 Excel 文件,方便用户进行查阅和处理。 5. 自定义功能:NativeExcel3 还提供了丰富的特性和接口,允许我们根据实际需求进行扩展和定制。可以通过设置保护密码、添加批注、自动筛选等方式,增加 Excel 文件的功能和交互性。 总之,NativeExcel3 提供了一套简单易用、功能强大的 API,方便我们以编程的方式对 Excel 文件进行读写和操作。无需依赖于 Excel 程序本身,使得我们能够更加灵活地处理和管理 Excel 数据。 ### 回答2: NativeExcel3是一种用于处理Excel文件的类库,它提供了强大的功能来读取、写入和操作Excel文件。它是第三方库NativeExcel的第三个版本。 使用NativeExcel3,我们可以轻松地创建、打开和保存Excel文件。它支持多种文件格式,包括.xls、.xlsx和.csv等。 与其他的Excel处理库相比,NativeExcel3具有更高的性能和更丰富的功能。它可以处理大量的数据并快速读写Excel文件,而不会给电脑带来负担。另外,它还支持格式化单元格、添加公式、创建图表等功能,使我们能够对Excel文件进行更加灵活的处理。 除了基本的读写功能,NativeExcel3还支持合并单元格、设置打印样式、添加批注等高级功能,帮助我们更好地管理和操作Excel文件。 NativeExcel3还提供了丰富的文档和示例代码,便于我们学习和使用。它与常见的开发语言(如C#、Java和Python)兼容,并且易于集成到我们的项目中。 总之,NativeExcel3是一个功能强大、性能出色的Excel处理类库,它可以帮助我们高效地处理Excel文件,并提供了丰富的功能来满足我们不同的需求。无论是在个人使用还是在企业开发中,NativeExcel3都是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值