C++操作word

日常崩溃 2021-04-14 08:27:43
请问C++操作word用win32API函数形式有什么方法解决呢,网上搜到的解决范例都是MFC的,自己水平有限改不到win32上面个,请问有什么解决的方式吗?
...全文
3731 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
clever101 2021-06-23
  • 打赏
  • 举报
回复

操作word的ole库本身都可以在mfc程序和win32程序上通用的。你下载一个mfc的范例,把程序读懂,然后就可以把里面的操作word的代码移植到win32程序了。不懂你付费给我,我帮你弄。

公共马甲0315 2021-05-09
  • 打赏
  • 举报
回复
我找了一个星期资源,发现Office2007以后的docx之类都和以前doc完全不同, 是多个xml琐碎文件打包生成的一个docx文件,微软还制定了标准ECMA-376,但只提供了一个Office xml sdk开发包的,这个仅支持C#或java,C++无法调用的。 目前只有open office与WPS提供C++接口函数的,然后开源的Open Office也有对应的库函数,但是不确定是否支持ECMA-376。 WPS虽然可以兼容docx,但是还是有差异的,比如部分文档用wps打开页数会变。。。所以想使用微软自家的API,就只能使用C#或者java一下下了,用C++可能不行的。。。 我还装了一个open office试试看的,但比起WPS,open office生成的文档和word的差异更大,感觉页眉页脚之类的位置都不一样。。
日常崩溃 2021-04-21
  • 打赏
  • 举报
回复
引用 16 楼 待续_1006的回复:
如果win32不能直接用com组件,把MFC的com组件封装成库,给win32用可行?
得封装成类,看网上还是需要.h头文件,就换了个方法,找了个DocxFactory来源库用,自己要求的功能比较简单,所以差不多用这个都实现了
待续_1006 2021-04-21
  • 打赏
  • 举报
回复
如果win32不能直接用com组件,把MFC的com组件封装成库,给win32用可行?
赵4老师 2021-04-19
  • 打赏
  • 举报
回复
仅供参考:
// TO DO: Edit the #import paths
//#pragma message ("Make sure you go to Tools.Options.Directories and add the paths to mso97.dll and vbeext1.olb.  Mso97.dll will usually be in c:\Program Files\Microsoft Office\Office, and vbeext1.olb will be in c:\Program Files\Common Files\Microsoft Shared\VBA")
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\Office11\\mso.dll" no_namespace rename("DocumentProperties", "DocumentPropertiesXL")
#import "C:\\Program Files\\Common Files\\Microsoft Shared\\VBA\VBA6\\VBE6EXT.OLB" no_namespace
#import "C:\\Program Files\\Microsoft Office\\OFFICE11\\excel.exe" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") rename("DocumentProperties", "DocumentPropertiesXL") no_dual_interfaces

#pragma warning (disable:4192)

#include <stdio.h>
#include <tchar.h>

void dump_com_error(_com_error &e) {
    _tprintf(_T("Oops - hit an error!\n"));
    _tprintf(_T("\a\tCode = %08lx\n"), e.Error());
    _tprintf(_T("\a\tCode meaning = %s\n"), e.ErrorMessage());
    _bstr_t bstrSource(e.Source());
    _bstr_t bstrDescription(e.Description());
    _tprintf(_T("\a\tSource = %s\n"), (LPCTSTR) bstrSource);
    _tprintf(_T("\a\tDescription = %s\n"), (LPCTSTR) bstrDescription);
}

// If this is placed in the scope of the smart pointers, they must be
// explicitly Release(d) before CoUninitialize() is called.  If any reference
// count is non-zero, a protection fault will occur.
struct StartOle {
    StartOle() { CoInitialize(NULL); }
    ~StartOle() { CoUninitialize(); }
} _inst_StartOle;

int main() {
    using namespace Excel;

    _ApplicationPtr pXL;

    try {
        pXL.CreateInstance(L"Excel.Application");

        pXL->Visible = VARIANT_TRUE;

        WorkbooksPtr pBooks = pXL->Workbooks;
        _WorkbookPtr pBook  = pBooks->Add((long)xlWorksheet);
        _WorksheetPtr pSheet = pXL->ActiveSheet;

        RangePtr pRange;
        pRange = pSheet->Range["A21"];
        pRange->Value2 = 75L;
        //pRange->NumberFormatLocal = "@";

        Sleep(1000);
        pRange = pSheet->Range["20:20"];
        pRange->Insert( (long)Excel::xlDown );
        pRange->Merge();

        Sleep(1000);

        pBook->Saved = VARIANT_TRUE;
        pXL->Quit();
    } catch(_com_error &e) {
        dump_com_error(e);
        pXL->Quit();
    }
    return 0;
}
日常崩溃 2021-04-18
  • 打赏
  • 举报
回复
引用 5 楼 公共马甲0315 的回复:
[quote=引用 3 楼 日常崩溃 的回复:]不好意思,我能再问一下您,这个还是使用MFC做的呀,用win32有什么解决方法呢
这个操作word的智能指针是微软提供的COM接口,和MFC不相关的,MFC和win32都可以调用它的。里面有专门的图片操作指针,可以插入图片的。导入com类库,它会根据你的语言生成相应的源文件,提供给你编译运行。 除了这种智能指针方式,还有一种数据库OLE DB的方式,就是把文档当成数据库来操作的,这种方法要麻烦些。[/quote] 不好意思,我想问一下,您说的是不是这样引入库文件,我这样添加之后,显示无法导入源文件,又试了一下_T(),也是有错误#import "C:\\Program Files (x86)\\Microsoft Office\\root\\Office16\\MSWORD9.OLB" no_namespace
日常崩溃 2021-04-16
  • 打赏
  • 举报
回复
引用 10 楼 女神打Boss的回复:
用 MSWORD.OLB 来搞的,也是mfc 可以参考一下 https://www.cnblogs.com/ckrgd/p/14438260.html
对呀网上看到的就是用mfc搞的,没看到win32
日常崩溃 2021-04-16
  • 打赏
  • 举报
回复
引用 10 楼 女神打Boss的回复:
用 MSWORD.OLB 来搞的,也是mfc 可以参考一下 https://www.cnblogs.com/ckrgd/p/14438260.html
对呀网上看到的就是用mfc搞的,没看到win32
女神打Boss 2021-04-16
  • 打赏
  • 举报
回复
office有个录制宏的功能,可以直接变成vba的代码,然后把vba的代码翻译成其他语言的代码
女神打Boss 2021-04-16
  • 打赏
  • 举报
回复
用 MSWORD.OLB 来搞的,也是mfc 可以参考一下 https://www.cnblogs.com/ckrgd/p/14438260.html
日常崩溃 2021-04-15
  • 打赏
  • 举报
回复
好的好的,谢谢
公共马甲0315 2021-04-15
  • 打赏
  • 举报
回复
https://docs.microsoft.com/zh-cn/office/vba/library-reference/concepts/getting-started-with-vba-in-office 这里有最新的微软资源,但是没有找到合适的,可能VBA就算最好的了。我也在看这些内容的,现在就想能够处理docx的,好好交流下哈
公共马甲0315 2021-04-15
  • 打赏
  • 举报
回复
那你可以用MFC封装一个dll,把需要COM接口的相关功能封装好,然后外部调用一下如何?
日常崩溃 2021-04-15
  • 打赏
  • 举报
回复
谢谢,可是我看的都是通过MFC工程导入的com类库,生成的源文件也有包含MFC的头文件,拿到win32项目里面就不能用,win32能直接导入com类库吗?
公共马甲0315 2021-04-15
  • 打赏
  • 举报
回复
引用 3 楼 日常崩溃 的回复:
不好意思,我能再问一下您,这个还是使用MFC做的呀,用win32有什么解决方法呢
这个操作word的智能指针是微软提供的COM接口,和MFC不相关的,MFC和win32都可以调用它的。里面有专门的图片操作指针,可以插入图片的。导入com类库,它会根据你的语言生成相应的源文件,提供给你编译运行。 除了这种智能指针方式,还有一种数据库OLE DB的方式,就是把文档当成数据库来操作的,这种方法要麻烦些。
公共马甲0315 2021-04-15
  • 打赏
  • 举报
回复
我尝试了下documentPTR指针的,open(),然后

 _DocumentPtr Open (
        VARIANT * FileName,
        VARIANT * ConfirmConversions = &vtMissing,
        VARIANT * ReadOnly = &vtMissing,
        VARIANT * AddToRecentFiles = &vtMissing,
        VARIANT * PasswordDocument = &vtMissing,
        VARIANT * PasswordTemplate = &vtMissing,
        VARIANT * Revert = &vtMissing,
        VARIANT * WritePasswordDocument = &vtMissing,
        VARIANT * WritePasswordTemplate = &vtMissing,
        VARIANT * Format = &vtMissing,
        VARIANT * Encoding = &vtMissing,
        VARIANT * Visible = &vtMissing,
        VARIANT * OpenAndRepair = &vtMissing,
        VARIANT * DocumentDirection = &vtMissing,
        VARIANT * NoEncodingDialog = &vtMissing,
        VARIANT * XMLTransform = &vtMissing );
//其中把参数Format 从0调整到18都不行,打开docx就异常。。。。。
日常崩溃 2021-04-15
  • 打赏
  • 举报
回复
不好意思,我能再问一下您,这个还是使用MFC做的呀,用win32有什么解决方法呢
公共马甲0315 2021-04-15
  • 打赏
  • 举报
回复
引用 1 楼 Eleven 的回复:
https://blog.csdn.net/cai843383655/article/details/50310573
大侠,你的这个也只是对doc有效啊,对docx,打开的时候智能指针就直接异常了。有没有办法可以操作docx的?
【为什么还需要学习C++?】 你是否接触很多语言,但从来没有了解过编程语言的本质?你是否想成为一名资深开发人员,想开发别人做不了的高性能程序?你是否经常想要窥探大型企业级开发工程的思路,但苦于没有基础只能望洋兴叹? 那么C++就是你个人能力提升,职业之路进阶的不二之选。【课程特色】 1.课程共19大章节,239课时内容,涵盖数据结构、函数、类、指针、标准库全部知识体系。2.带你从知识与思想的层面从0构建C++知识框架,分析大型项目实践思路,为你打下坚实的基础。3.李宁老师结合4大国外顶级C++著作的精华为大家推出的《征服C++11》课程。【学完后我将达到什么水平?】 1.对C++的各个知识能够熟练配置、开发、部署;2.吊打一切关于C++的笔试面试题;3.面向物联网的“嵌入式”和面向大型化的“分布式”开发,掌握职业钥匙,把握行业先机。【面向人群】 1.希望一站式快速入门的C++初学者; 2.希望快速学习 C++、掌握编程要义、修炼内功的开发者; 3.有志于挑战更高级的开发项目,成为资深开发的工程师。 【课程设计】 本课程包含3大模块基础篇本篇主要讲解c++的基础概念,包含数据类型、运算符等基本语法,数组、指针、字符串等基本词法,循环、函数、类等基本句法等。进阶篇本篇主要讲解编程中常用的一些技能,包含类的高级技术、类的继承、编译链接和命名空间等。提升篇:本篇可以帮助学员更加高效的进行c++开发,其中包含类型转换、文件操作、异常处理、代码重用等内容。

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧