excel学习库

excel表格_excel函数公式大全_execl从入门到精通

C++/Qt 显示 word,Excel,PDF总结

阅读本文大概需要 6 分钟


WordExcelPDFC++

读写 Word

Word

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

XML 模板替换

Word

优点

  • 代码量相对较少、导出速度快
  • 跨平台,支持多个系统,系统不安装 office 也能导出;
  • 支持图片以及固定格式导出;

缺点

  • 导出格式固定,可扩展性不强,如果需求变化导出格式变了,那么模板也要跟着改变;
  • 一种格式对应一份模板,如果导出格式较多,需要准备的模板文件较多,这样比较繁琐;
  • Word

举个栗子

Word

  • Word XMLXML-Template.xml
  • 读取文档内容进行变量替换
file"XML-Template.xml"
if

"open xxml file fail. "
return0





"$VALUE0""1"
"$VALUE1""法外狂徒张三"
"$VALUE2""考试不合格"
"$VALUE3""2"
"$VALUE4""李四"
"$VALUE5""合格"

newFile"export.doc"
if

"file open fail."
return0




  • 保存替换后的内容,写入文件

XMLXML

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

COM 组件方式

Micro Soft

COM 技术概述

QtQt ActiveX

优点

  • 实现简单,快速上手;

缺点

  • 导出写入速度慢,因为相当于打开 word 文档操作;
  • Windows
  • 需要程序运行的电脑安装 office word,否则调用失败

举个栗子

pro

QT  *= axcontainer

打开文档写入内容

newstd

bool"word.Application"

if

returnfalse


// 设置是否显示
"Visible"false

"Documents"

ifnullptr

returnfalse


// 新建一个空白文档
"Add (void)"

// 获取激活的文档并使用
"ActiveDocument"
ifnullptr

returnfalse


// 插入字符串
"Selection"
ifnullptr

"TypeText(const QString&)""公众号:devstone"



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

  • 这种方案比较适合那些排版比较复杂,图片、文字、表格混排的场景下,而且内容都是动态变化的,可以很好的实现定制化

  • Word

  • D:\\Soft\test.png

  • Office Word

Excel

HTML 方式

WordHTML.doc

优点

  • Windows
  • 导出速度快、代码可扩展;

缺点

  • HTML
  • 插入的图片是本地图片文件的链接,导出的 word文档拷贝到其它电脑图片无法显示

举个栗子

HTML2Word::getHtmlContent()

""
"<html>"
"<head>"
"<title>测试生成word文档</title>"
"<head>"
"<body style=\"bgcolor:yellow\">"
"<h1 style=\"background-color:red\">测试qt实现生成word文档</h1>"
"<hr>"
"<p>这里是插入图片<img src=\"D:\\title.jpg""picture\" width=\"100\" height=\"100\"></p>"
"</hr>"
"</body>"
"</html>"

return


// 保存写入文件
file"D:/htmp2Word.doc"
if

returnfalse


out(&file)



HTML

图片问题其实可以手动进行转化,文档导出成功后手动拷贝内容到新的文档,这样图片就真正插入到文档中,文档发送给别人也不会丢失图片了

WPSweb

某些电脑分辨率变化也会导致生成的文档中字体等产生变化

第三方开源库

可以使用的第三方库几乎没有,网络上找到的有这么几个

  • OpenOffice: 兼容性差,集成调用难度大
  • LibOffice: 太庞大,不容易集成
  • DuckX: 太小众,只能简单的使用
  • docx:小众库

DuckX库docx库

WordC++JavaC#PythonC++

所以怎么选择还是看自己项目需求吧,没有十全十美的方案


WrodWord

这种需求应该不会很多,而且显示难度更大一些

COMQAxWidget officeQtofficeWord

WordPDFPDFPDF

读写 Excel

目前有一个支持比较好的第三方库可以使用,整体使用基本可以满足日常使用

QXlsx

这款开源库支持跨平台,Linux、Windows、Mac、IOS、Android,使用方式支持动态库调用和源码直接集成,非常方便

qmakecmake



// 设置一些样式

// 边框样式
1130// 设置行高
// 设置对齐方式

// 插入文本
11"微信公众号:devstone"

// 合并单元格
2144

// 导出保存
"D:/xlsx_export.xlsx"

// 添加工作表
"devstone"

Qt Api

MITMIP

COMExcelCOM

读写 PDF

PDFC++

mupdfpopplern

Github

qpdf 库

pdf.jsWebEngineJavaScript

项目地址

  • 直接从本地文件加载;
  • 支持从内存数据直接加载渲染 PDF 内容;

QtWebEngine

qtpdf 库

QtAPIQt

Qt 官方

小试牛刀

关于如何使用,官方已经给了我们非常详细的步骤了,直接跟着下面几步就 OK 了

官方教程

//code.qt.io/qt-labs/qtpdf









pdfiumGitHub

可正常访问的仓库地址:https://github.com/PDFium/PDFium

相关类可以看这个文档:https://developers.foxit.com/resources/pdf-sdk/c_api_reference_pdfium/modules.html

BSD 3-ClauseBSD

总结

以上就是项目中常用的文档处理方法总结,当然了肯定也还有其它方案可以实现,毕竟条条大路通罗马,如果你还要不错的方案和建议欢迎留言

GitHub

取之互联网、回报互联网

原创不易,如果觉得对你有帮助,欢迎点赞、在看、转发


推荐阅读

  • Qt Creator 源码学习笔记01,初识QTC
  • Qt Creator 源码学习笔记02,认识框架结构结构
  • Qt Creator 源码学习笔记03,大型项目如何管理工程
  • Qt Creator 源码学习笔记04,多插件实现原理分析
  • Qt Creator 源码学习笔记 05,菜单栏是怎么实现插件化的?

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接