c 语言 读写excel,C++读写Excel的实现方法详解

c 语言 读写excel,C++读写Excel的实现方法详解1 导入 Excel 类型库使用 VisualC 的扩展指令 import 导入 Excel 类型库 import C ProgramFiles CommonFiles microsoftsha OFFICE14 MSO DLL rename RGB MsoRGB rename SearchPath MsoSearchPat import C

1.导入Excel类型库使用Visual C++的扩展指令#import导入Excel类型库:

#import “C:\\Program Files\\Common Files\\microsoft shared\\OFFICE14\\MSO.DLL” \

rename(“RGB”,”MsoRGB”) \

rename(“SearchPath”,”MsoSearchPath”)

#import “C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\\VBA6\\VBE6EXT.OLB”

#import “C:\\Program Files\\Microsoft Office\\Office14\\EXCEL.EXE” \

rename( “DialogBox”, “ExcelDialogBox” ) \

rename( “RGB”, “ExcelRGB” ) \

rename( “CopyFile”, “ExcelCopyFile” ) \

rename( “ReplaceText”, “ExcelReplaceText” ) \

exclude( “IFont”, “IPicture” ) no_dual_interfaces

#import指令会从指定的可执行文件,动态链接库等COM组件中导出类型库(type lib),在Debug和Release临时目录中生成对应的类型库头文件(type lib header file),以供C++程序使用。如以上三条指令在编译后会生成excel.tlh, mso.lh和vbetext.olb三个头文件,可以在Debug和Release目录中找到。

2.访问Excel暴露的COM对象下面是一段比较完整的访问Excel的实例代码。首先用生成的数据填充单元格,然后用这些单元格的数据生成了一个图表(Chart):

try

{

Excel::_ApplicationPtr pExcelApp;

HRESULT hr = pExcelApp.CreateInstance(L”Excel.Application”);

ATLASSERT(SUCCEEDED(hr));

pExcelApp->Visible = true;   // make Excel’s main window visible

Excel::_WorkbookPtr pWorkbook = pExcelApp->Workbooks->Open(lpszPathName);  // open excel file

Excel::_WorksheetPtr pWorksheet = pWorkbook->ActiveSheet;

pWorksheet->Name = L”Chart Data”;

Excel::RangePtr pRange = pWorksheet->Cells;

const int nplot = 100;

const double xlow = 0.0, xhigh = 20.0;

double h = (xhigh-xlow)/(double)nplot;

pRange->Item[1][1] = L”x”;  // read/write cell’s data

pRange->Item[1][2] = L”f(x)”;

for (int i=0;i

{

double x = xlow+i*h;

pRange->Item[i+2][1] = x;

pRange->Item[i+2][2] = sin(x)*exp(-x);

}

Excel::RangePtr pBeginRange = pRange->Item[1][1];

Excel::RangePtr pEndRange = pRange->Item[nplot+1][2];

Excel::RangePtr pTotalRange =

pWorksheet->Range[(Excel::Range*)pBeginRange][(Excel::Range*)pEndRange];

Excel::_ChartPtr pChart = pExcelApp->ActiveWorkbook->Charts->Add();

// refer to :

// http://msdn.microsoft.com/en-us/library/microsoft.office.tools.excel.chart.chartwizard(v=vs.80).aspx

pChart->ChartWizard(

(Excel::Range*)pTotalRange,

(long)Excel::xlXYScatter,

6L,

(long)Excel::xlColumns,

1L,1L,

true,

L”My Graph”,

L”x”,L”f(x)”);

pChart->Name = L”My Data Plot”;

pWorkbook->Close(VARIANT_TRUE);  // save changes

pExcelApp->Quit();

}

catch (_com_error& error)

{

ATLASSERT(FALSE);

ATLTRACE2(error.ErrorMessage());

}

在这段代码中,Excel::_ApplicationPtr , Excel::_WorkbookPtr 和 Excel::_WorksheetPtr 等均是Visual C++ 编译器根据#import指令自动生成的智能指针,实际上就是C++模板类_com_ptr_t的typedef,其定义可在excel.tlh等类型库头文件中找到。另外,由于#import指令中没有指定raw_interface_only修饰符,Visual C++对Excel的COM接口进行了适当的封装,以简化COM接口属性和方法的调用,并且将HRESULT返回值都转换成了C++异常,因此,上面的这段代码不需要每一步都坚持HRESULT,而是改为捕获C++异常。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176182.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午10:32
下一篇 2026年3月26日 下午10:32


相关推荐

  • ZAB协议简介

    ZAB协议简介Zookeeper 使用 ZookeeperAto ZAB 协议来保障分布式数据一致性 ZAB 是一种支持崩溃恢复的消息广播协议 采用类似 2PC 的广播模式保证正常运行时性能 并使用基于 Paxos 的策略保证崩溃恢复时的一致性 在阅读本文前建议先了解 2PC 和 PaxosZAB 协议中节点存在四种状态 Leading 当前节点为集群 Leader 负责协调事务

    2026年1月21日
    2
  • 转载:Java使用dom4j解析XML

    转载:Java使用dom4j解析XML原文地址:http://blog.csdn.net/yyywyr/article/details/38359049解析XML的方式有很多,本文介绍使用dom4j解析xml。1、环境准备(1)下载dom4j-1.6.1.jar(2)下载junit-4.10.jar2、温馨提示解析XML过程是通过获取Document对象,然后继续获取各个节点以及属性等操作,因此获取Documen

    2022年6月21日
    27
  • centos7搭建radius认证服务器

    centos7搭建radius认证服务器radius

    2026年3月19日
    2
  • Razor视图引擎

    Razor视图引擎1 ASP NET nbsp MVC3 nbsp 带来了一种新的名为 Razor nbsp 的视图引擎 提供了下列优点 Razor nbsp 的语法简单且清晰 只需要最小化的输入 Razor nbsp 容易学习 语法类似于 nbsp C nbsp 和 nbsp VBVisual nbsp Studio nbsp 对于 nbsp Razor nbsp 提供了智能提示和语法着色 Razor nbsp 视图不需要允许程序或者启动 nbsp Web nbsp 服务器就可以进行测试 2 Razor nbsp 现在提供了一些新的特征 model nbsp

    2026年3月18日
    2
  • php sigpipe,遭遇SIGPIPE[转]

    php sigpipe,遭遇SIGPIPE[转]转自:http://www.diybl.com/course/3_program/c++/cppjs/20090831/173152.html我写了一个服务器程序,在Windows下在cygwin环境编译后执行,然后用C#写了多线程客户端进行压力测试.程序一直运行正常.但当在Linux下测试时,总是莫名退出.最后跟踪到是write调用导致退出.用gdb执行程序,退出时提示”Broken…

    2022年5月30日
    39
  • 软件框架详解

    软件框架详解软件框架至少包含以下组成部分 nbsp nbsp 1 一系列完成计算的模块 在此称为构件 nbsp 2 构件之间的关系与交互机制 3 一系列可变点 也称热点 Hot spots 或调整点 4 可变点的行为调整机制 开发人员通过软件框架的行为调整机制 将领域中具体应用所特有的软件模块绑定到该软件框架的可变点 从而得到最终应用系统 这一过程称为软件框架的例化 instantiat

    2026年3月17日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号