word没激活有什么影响,word激活时间过了怎么办

首页 > 实用技巧 > 作者:YD1662023-11-19 11:59:47

阅读本文大概需要 6 分钟

日常开发软件可能会遇到这类小众需求,导出数据到 Word、Excel 以及 PDF文件,如果你使用 C 编程语言,那么可以选择的方案不是很多,恰好最近刚好有这部分需求,整理下这段时间踩过的坑,方便后人

读写 Word

日常开发的软件使用最多的应该是导出数据到 Word 文档中,目前可以用的方案有这几种

word没激活有什么影响,word激活时间过了怎么办(1)

没有十全十美的方案,任何方案都存在优点和缺点,下面来详细看下这几种方案的优缺点以及适用场景

XML 模板替换

原理:事先编辑好一份 Word 模板,需要替换内容的 地方预留好位置,然后使用特殊字段进行标记,后面使用代码进行全量替换即可完成

优点缺点举个栗子

我们先编辑一份 Word 模板文档,内容大概如下所示:

word没激活有什么影响,word激活时间过了怎么办(2)

QFile file("XML-Template.xml"); if (!File.open(QIODevice::ReadOnly)) { qDebug() << "open xxml file fail. " << file.errorString(); return 0; } QByteArray baContent = file.readAll(); file.close(); QString strAllContent = QString::fromLocal8Bit(baContent); strAllContent.replace("$VALUE0", "1"); strAllContent.replace("$VALUE1", QString::fromLocal8Bit("法外狂徒张三")); strAllContent.replace("$VALUE2", QString::fromLocal8Bit("考试不合格")); strAllContent.replace("$VALUE3", "2"); strAllContent.replace("$VALUE4", QString::fromLocal8Bit("李四")); strAllContent.replace("$VALUE5", QString::fromLocal8Bit("合格")); QFile newFile("export.doc"); if (!newFile.open(QIODevice::WriteOnly)) { qDebug() << "file open fail." << newFile.errorString();; return 0; } newFile.write(strAllContent.toLocal8Bit()); newFile.close();

word没激活有什么影响,word激活时间过了怎么办(3)

可以看出来这种方式比较繁琐,重点是编辑固定的模板格式,而且编辑好后保存成XML格式后还需要继续调整,这种 XML 格式标签很多,不小心就修改错了,导致导出的文档打不开

这种方式适合模板内容不太复杂,内容较少的情况下使用

COM 组件方式

原理:采用 Micro Soft公开的接口进行通讯,进行读写时会打开一个 `Word进程来交互

COM 技术概述

qt 为我们提供了专门进行交互的类和接口,使用 Qt ActiveX框架就可以很好的完成交互工作

优点缺点举个栗子

使用时需要引入对应的模块,在 pro 文件引入模块

QT *= axcontainer

打开文档写入内容

QAxObject *pWordWidget = new(std::nothrow) QAxObject; bool bResult = pWordWidget->setControl("word.Application"); if (!bResult) { return false; } // 设置是否显示 pWordWidget->setProperty("Visible", false); QAxObject *pAllDocuments = pWordWidget->querySubObject("Documents"); if(nullptr == pAllDocuments) { return false; } // 新建一个空白文档 pAllDocuments->dynamicCall("Add (void)"); // 获取激活的文档并使用 QAxObject *pActiveDocument = pAllDocuments->querySubObject("ActiveDocument"); if(nullptr == pActiveDocument) { return false; } // 插入字符串 QAxObject *pSelectObj = pWordWidget->querySubObject("Selection"); if (nullptr != pSelectObj) { pSelectObj->dynamicCall("TypeText(const QString&)", "公众号:devstone"); } ……

可以看出来使用起来不难,对于新手友好一点,很多写入操作方法比较繁琐,需要自己重新封装一套接口

这种方式同样适用于写入 Excel 文件,后面再说

HTML 方式

原理:这种方式得益于 Word支持 HTML格式导出渲染显示,那么反向也可以支持,需要我们拼接 HTML格式内容,然后写入文件保存成 .doc格式

优点缺点举个栗子

QString HTML2Word::getHtmlContent() { QString strHtml = ""; strHtml = "<html>"; strHtml = "<head>"; strHtml = "<title>测试生成word文档</title>"; strHtml = "<head>"; strHtml = "<body style=\"bgcolor:yellow\">"; strHtml = "<h1 style=\"background-color:red\">测试qt实现生成word文档</h1>"; strHtml = "<hr>"; strHtml = "<p>这里是插入图片<img src=\"D:\\title.jpg" alt=\"picture\" width=\"100\" height=\"100\"></p>"; strHtml = "</hr>"; strHtml = "</body>"; strHtml = "</html>"; return strHtml; } // 保存写入文件 QFile file("D:/htmp2Word.doc"); if (!file.open(QIODevice::WriteOnly)) { return false; } QTextStream out(&file); out << getHtmlContent(); file.close();

word没激活有什么影响,word激活时间过了怎么办(4)

首页 123下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.