【C++简单写Word】(四) 整理及反思

本文分享了使用C++操作Word及Excel文档的经验,包括初始化应用、处理参数、保存文件等,并介绍了如何在Word中插入Excel图表的具体步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习用代码操作Word的时候真是遇到了许许多多的困难啊,不过好歹一一克服了。
我要将我这段时间的所学整理成笔记。
在如何初始化Word或者Excel上,网络上有很多详细的教程我就不在啰嗦了。

不过如果无法初始化Application时,问题一般出在忘记添加

    if (!AfxOleInit())
    {
        AfxMessageBox(_T("初始化OLE出错"));
        return;
    }

无论是写VBA或者写调用的时候有许许多多的函数,我们并不太清楚这个函数的作用,这个时候我们可以参考MSDN或者看WPS表格功能树


传递的参数有两种写法

一
    CComVariant Template(_T(""));
    CComVariant NewTemplate(false);
    CComVariant DocumentType(0);
    CComVariant的构造参数会自动识别传递类型
    传递该引用即可,如 &Template
二
    COleVariant((short)10);
    COleVariant(_T(""));
    使用这种方法时需要加入该类型

在写VBA时有许多可选参数,而在代码部分可选参数也是必须填上的,这个时候可以使用

COleVariant VarOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  // 默认参数

向传递VarOpt这个值即可,在我们不太清楚函数要调用的是什么参数的时候也可以传递该参数。


有些参数需要特殊化处理,比如

LPDISPATCH AddOLEObject(VARIANT * ClassType, VARIANT * FileName, VARIANT * LinkToFile, VARIANT * DisplayAsIcon, VARIANT * IconFileName, VARIANT * IconIndex, VARIANT * IconLabel, VARIANT * Range)
该函数的最后一项是要求传入一个Range的指针进去,如果我们希望当我们输出时是按照先输出一段文字,再输出表格或者图表的话,Range就需要特殊化处理。
Range.SetRange(Selection.get_End(), Selection.get_End());
CComVariant range(Range);
最后传递&range

当我们使用Document.SaveAs(VARIANT * FileName,……)该函数保存的时候保存的文件格式只能是.doc,如果是.ocx程序就会崩溃,这个我不太理解是为什么,如果有知道的希望能告诉我下。


如果要在写Word的时候输出图表,那么久需要加入Excel的支持文件,就是把生成图表之后的指针交给Excel中的workbook,这样就可以直接写数据了

    Range.SetRange(Selection.get_End(), Selection.get_End());
    CComVariant range(Range);
    Shape = Shapes.AddOLEObject(COleVariant(L"Excel.Chart"), VarOpt, VarOpt, VarOpt, VarOpt, VarOpt, VarOpt, &range);
    OLEFormat = Shape.get_OLEFormat();
    CWorkbook workbook = OLEFormat.get_Object();

大概就是这些了,如果有什么问题欢迎大家和我讨论。如果哪块有问题,我也希望大家能帮我指正出来,我会一一改正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值