当前位置:首页 > 实用技巧 >

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

来源:原点资讯(www.yd166.com)时间:2023-11-19 11:59:47作者:YD166手机阅读>>

阅读本文大概需要 6 分钟

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

读写 Word

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

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

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

XML 模板替换

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

优点
  • 代码量相对较少、导出速度快
  • 跨平台,支持多个系统,系统不安装 office 也能导出;
  • 支持图片以及固定格式导出;
缺点
  • 导出格式固定,可扩展性不强,如果需求变化导出格式变了,那么模板也要跟着改变;
  • 一种格式对应一份模板,如果导出格式较多,需要准备的模板文件较多,这样比较繁琐;
  • 需要 Word 2003 以上版本;
举个栗子

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

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

  • 将该文档另存为 Word XML 文档 XML-Template.xml
  • 读取文档内容进行变量替换

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框架就可以很好的完成交互工作

优点
  • 实现简单,快速上手;
缺点
  • 导出写入速度慢,因为相当于打开 word 文档操作;
  • 仅 Windows平台可用,其它平台失效;
  • 需要程序运行的电脑安装 office word,否则调用失败
举个栗子

使用时需要引入对应的模块,在 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"); } ……

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

  • 这种方案比较适合那些排版比较复杂,图片、文字、表格混排的场景下,而且内容都是动态变化的,可以很好的实现定制化
  • 当然了它的缺点也不少,也有一些坑,有时候莫名其妙会失败,还有就是比如你电脑安装的 Word 没有激活,那么每次启动会弹激活窗口
  • 还有就是这种方式要求所有的路径必须是本地化的,比如 D:\\Soft\test.png
  • 使用前最好读取注册表判断当前电脑是否安装了 Office Word,如果没有安装,直接读取操作肯定会崩溃

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

HTML 方式

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

优点
  • 跨平台,不仅限于 Windows平台,代码可扩展性比较好
  • 导出速度快、代码可扩展;
缺点
  • 字符串拼接 HTML 容易出错,缺失标签导出后无法显示;
  • 插入的图片是本地图片文件的链接,导出的 word文档拷贝到其它电脑图片无法显示
举个栗子

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下一页

栏目热文

word未激活影响使用吗(word未被激活怎么办啊)

word未激活影响使用吗(word未被激活怎么办啊)

大家日常工作中,经常会遇到,办公软件,office套件的word、excel、ppt打开之后经常弹出来,没有激活的窗口,...

2023-11-19 11:55:01查看全文 >>

word不激活有什么影响(word没有激活有什么影响吗)

word不激活有什么影响(word没有激活有什么影响吗)

新机刚入手,有啥要注意的呢?开机咋设置,咋激活啊?别着急,你想知道的,都在这里了!1.如何激活预装的windows操作系...

2023-11-19 11:49:13查看全文 >>

word显示未激活功能被禁用怎么办(word突然显示未激活怎么解决)

word显示未激活功能被禁用怎么办(word突然显示未激活怎么解决)

 office激活提示管理员已禁用此功能怎么办?最近有用户在office激活过程中,遇到提示office激活提示管理员已...

2023-11-19 12:00:15查看全文 >>

word未激活的和激活的有什么区别(word没激活是什么意思)

word未激活的和激活的有什么区别(word没激活是什么意思)

相信很多办公室人员都会用到Excel、Word、PowerPoint等一些办公软件,但由于Office安装后想要体验完整...

2023-11-19 12:01:50查看全文 >>

word未激活解决方法(word激活不了怎么办)

word未激活解决方法(word激活不了怎么办)

适用于预装Office2021的产品激活步骤:点击【开始】按钮,点击【Word】打开▽看到【你已拥有Office】,选择...

2023-11-19 12:14:34查看全文 >>

鸣人见到自己的父亲是哪一集(鸣人是在第几集见到了父母)

鸣人见到自己的父亲是哪一集(鸣人是在第几集见到了父母)

火影忍者:让人落泪的五个瞬间,凯皇八门遁甲,鸣人告别四代火影!5.带土临终遗言带土被情所控,究其一生所为,也只为了能在...

2023-11-19 12:04:25查看全文 >>

鸣人见到他的爸爸是哪一集(鸣人见到自己的父亲在哪一集)

鸣人见到他的爸爸是哪一集(鸣人见到自己的父亲在哪一集)

人气动漫《火影忍者》,动画第129集已经出来,这次的剧情让酱铺君竟然泪目了,不妨和动漫迷一起聊聊吧。在动画129集中,博...

2023-11-19 12:16:02查看全文 >>

鸣人和父亲见面是哪一集(鸣人见到父亲的那一集)

鸣人和父亲见面是哪一集(鸣人见到父亲的那一集)

近日,《博人传》动画第205集已经更新了,在这一集中,得知鸣人出事后,鹿丸第一时间就赶到了鸣人家中。在和川木了解了情况之...

2023-11-19 12:10:56查看全文 >>

鸣人见自己爸爸是多少集(鸣人见到自己的父亲是第几集)

鸣人见自己爸爸是多少集(鸣人见到自己的父亲是第几集)

人气动漫《火影忍者》,动画第129集已经出来,这次的剧情让酱铺君竟然泪目了,不妨和动漫迷一起聊聊吧。在动画129集中,博...

2023-11-19 12:04:56查看全文 >>

鸣人见到爸爸妈妈是哪一集(第几集鸣人见到爸爸妈妈)

鸣人见到爸爸妈妈是哪一集(第几集鸣人见到爸爸妈妈)

1、三代猿飞之死凶手:大蛇丸2、好色仙人之死凶手:长门(好色仙人的徒弟)3、阿斯玛之死凶手:晓(飞段,角都)4、鼬神之死...

2023-11-19 11:40:37查看全文 >>

文档排行