0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

记录嵌入式Excel表格数据导出的构建过程

嵌入式小生 来源:嵌入式小生 作者:iriczhao 2022-10-27 11:14 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

最近有一个嵌入式Excel表格数据导出的需求:应用软件运行于嵌入式Linux平台上,在设备运行过程中,存储了许多数据,这些数据想以表格的形式导出。

考虑到Windows平台的普遍性,需要将数据以excel表格形式导出,故选择了一个开源库:QtXlsxWriter,本文主要记录其编译构建过程。

从下列地址https://github.com/dbzhang800/QtXlsxWriter获取安装包,将源码包解压缩,目录结构如下图所示:

8a47ddd8-4575-11ed-96c9-dac502259ad0.png

example目录下存放的是示例Demo。

src目录下存放的是xlsx的源码。

tests目录下存放的是测试工程。

QtXlsxWriter可以通过QtCreator来编译构建,所以我们打开安装在linux平台上的QtCreator,然后使用QtCreator打开QtXlsxWriter项目(选择源码目录下的xxx.pro文件)。选择对应的编译构建套件后,如下图所示:

8aaa8e6a-4575-11ed-96c9-dac502259ad0.png

点击项目管理视图中的顶级目录,单击右键,选择“构建”,即可构建QtXlsxWriter:

8ad7df3c-4575-11ed-96c9-dac502259ad0.png

编译成功后,将在源码目录的同级下创建构建输出目录,该目录结构如下图所示:

8afdbc2a-4575-11ed-96c9-dac502259ad0.png

bin :用于存放二进制文件。(该目录为空)

examples:示例Demo的编译构建输出目录。

include:该目录存放关于QtXlsxWriter的头文件:

8b33abfa-4575-11ed-96c9-dac502259ad0.png

lib:该目录用于存放QtXlsxWriter的库目录:

8b5f9d78-4575-11ed-96c9-dac502259ad0.png

mkspecs:该目录是Qt的模块化标识目录,用于向Qt开发环境添加Xlsx:

8b866110-4575-11ed-96c9-dac502259ad0.png

tests:该目录用于存放测试工程。

在上述目录中,include、lib、mkspecs目录是比较重要的目录。在搭建QtXlsxWriter开发环境时需要使用到。

将构建完成后的目录下的bin、include、lib、mkspecs、src目录拷贝到Qt的安装目录下,以在QtCreator中可以使用Qt+=xlsx加载模块

然后可以编译构建一个demo示例来测试一下。本文以chart为例,其代码如下:

#include
#include"xlsxdocument.h"
#include"xlsxcellrange.h"
#include"xlsxchart.h"

usingnamespaceQXlsx;

intmain()
{
//![0]创建xlsx文档对象。向单元格总写入数据
Documentxlsx;
for(inti=1;i< 10; ++i) {
        xlsx.write(i, 1, i * i * i); // A1:A9
        xlsx.write(i, 2, i * i); // B1:B9
        xlsx.write(i, 3, i * i - 1); // C1:C9
    }
    //![0]

    //![1]创建图表
    Chart *pieChart = xlsx.insertChart(3, 3, QSize(300, 300));
    pieChart->setChartType(Chart::CT_Pie);
pieChart->addSeries(CellRange("A1:A9"));
pieChart->addSeries(CellRange("B1:B9"));
pieChart->addSeries(CellRange("C1:C9"));

Chart*pie3DChart=xlsx.insertChart(3,9,QSize(300,300));
pie3DChart->setChartType(Chart::CT_Pie3D);
pie3DChart->addSeries(CellRange("A1:C9"));

Chart*barChart=xlsx.insertChart(23,3,QSize(300,300));
barChart->setChartType(Chart::CT_Bar);
barChart->addSeries(CellRange("A1:C9"));

Chart*bar3DChart=xlsx.insertChart(23,9,QSize(300,300));
bar3DChart->setChartType(Chart::CT_Bar3D);
bar3DChart->addSeries(CellRange("A1:C9"));

Chart*lineChart=xlsx.insertChart(43,3,QSize(300,300));
lineChart->setChartType(Chart::CT_Line);
lineChart->addSeries(CellRange("A1:C9"));

Chart*line3DChart=xlsx.insertChart(43,9,QSize(300,300));
line3DChart->setChartType(Chart::CT_Line3D);
line3DChart->addSeries(CellRange("A1:C9"));

Chart*areaChart=xlsx.insertChart(63,3,QSize(300,300));
areaChart->setChartType(Chart::CT_Area);
areaChart->addSeries(CellRange("A1:C9"));

Chart*area3DChart=xlsx.insertChart(63,9,QSize(300,300));
area3DChart->setChartType(Chart::CT_Area3D);
area3DChart->addSeries(CellRange("A1:C9"));

Chart*scatterChart=xlsx.insertChart(83,3,QSize(300,300));
scatterChart->setChartType(Chart::CT_Scatter);
//Willgeneratethreelines.
scatterChart->addSeries(CellRange("A1:A9"));
scatterChart->addSeries(CellRange("B1:B9"));
scatterChart->addSeries(CellRange("C1:C9"));

Chart*scatterChart_2=xlsx.insertChart(83,9,QSize(300,300));
scatterChart_2->setChartType(Chart::CT_Scatter);
//Willgeneratetwolines.
scatterChart_2->addSeries(CellRange("A1:C9"));

Chart*doughnutChart=xlsx.insertChart(103,3,QSize(300,300));
doughnutChart->setChartType(Chart::CT_Doughnut);
doughnutChart->addSeries(CellRange("A1:C9"));
//![1]

//![2]将xlsx文档对象保存为Book1.xlsx文件。
xlsx.saveAs("Book1.xlsx");
//![2]

//保存为Book2.xlsx文件。
Documentxlsx2("Book1.xlsx");
xlsx2.saveAs("Book2.xlsx");
return0;
}

选中项目管理视图中的example目录,依次展开,选择chart目录,右键单击,选中“构建”选项,即可对chart示例演示进行构建。

然后在chart的编译构建目录下,将生成如下文件:

8ba2da34-4575-11ed-96c9-dac502259ad0.png

在终端运行一下生成的程序(此处是chart):

8bc51ae0-4575-11ed-96c9-dac502259ad0.png

运行完成后,将在同级目录下创建两个文件:如下图所示:

8bf79204-4575-11ed-96c9-dac502259ad0.png

注:由于在ubuntu编译构建,没有安装能打开xlsx的应用软件,故将其拷贝到Windows下使用wps打开。打开后图表如下图所示:

8c356296-4575-11ed-96c9-dac502259ad0.png

以上过程是在Ubuntu18.04下进行的,如果想让QtXlsxWriter运行于嵌入式linux平台上,只需要在QtCreator中选择编译构建套件时,选择对应的交叉编译套件编译,在编译完成后,将构建出的库文件复制到Linux的链接库目录下(一般为/usr/lib),则可以在嵌入式Linux平台上使用QtXlsxWriter了。






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • QTcreator
    +关注

    关注

    0

    文章

    11

    浏览量

    7364
  • BIN文件
    +关注

    关注

    0

    文章

    27

    浏览量

    9064
  • Linux开发
    +关注

    关注

    0

    文章

    47

    浏览量

    7765

原文标题:Excel表格数据导出,这个库不错

文章出处:【微信号:嵌入式小生,微信公众号:嵌入式小生】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    什么是嵌入式应用开发?

    。 · ‌医疗设备‌:如心电图仪、血压计等。 开发工具和技术 嵌入式开发过程中常用的工具包括: · ‌集成开发环境(IDE)‌:用于编写、编译和调试代码。 · ‌编译器‌:将高级语言代码转换为机器语言
    发表于 01-12 16:13

    arm嵌入式主板优缺点

    嵌入式主板是嵌入在设备里面做控制、数据处理使用的CPU板 ,常见的有两类,即基于X86的嵌入式主板和基于RISC的ARM 嵌入式主板。今天我
    发表于 01-08 07:08

    从小白到大牛:Linux嵌入式系统开发的完整指南

    是 **“在嵌入式硬件上运行 Linux 系统并开发应用”**,其本质是软硬件协同的工程实践。入门阶段需完成三大核心任务:​ 系统认知构建:明确嵌入式 Linux 的应用场景(智能家居、工业控制、物联网
    发表于 12-16 10:42

    嵌入式应掌握的几种能力

    1. 编程语言 基本掌握嵌入式必备的编程语言。C语言为主,C++为辅。在资源有限的情况下,大多数嵌入式产品还是使用C语言为主的,特别是底层驱动开发。上层应用开发大多用C,在一些资源比较充足的平台
    发表于 12-08 06:05

    ARM嵌入式这样学

    )话题大热,Arm也推出神经网络机器学习软件 Arm NN,可在基于Arm的高能效平台上轻松构建和运行机器学习应用程序,未来嵌入式行业也将不断革新,嵌入式市场有所可期。 据知乎某15年从业人员看
    发表于 12-04 07:48

    使用xmake+zig更优雅的进行嵌入式系统开发

    引言在嵌入式系统开发领域,构建工具的稳定性与可维护性对项目长期发展至关重要。嵌入式项目通常需要针对不同硬件平台进行交叉编译,每个平台都需要依赖特定的构建工具链,环境搭建复杂。随着LLV
    的头像 发表于 11-30 10:04 4985次阅读
    使用xmake+zig更优雅的进行<b class='flag-5'>嵌入式</b>系统开发

    电能质量在线监测装置的报警记录可以导出吗?

    操作(工业级装置) 按键导出:在装置本地菜单中选择 “事件记录”→“报警记录”,按导出键(如施耐德 PM5100 的 “Export” 按钮),将
    的头像 发表于 11-05 13:46 756次阅读

    嵌入式需要掌握哪些核心技能?

    接口是80%岗位的必备技能,工业协议需求集中于特定行业。 在AI、大数据席卷的当下,嵌入式技术依然稳居制造业、物联网、汽车电子等领域的核心地位。 数据显示,2024年嵌入式岗位招聘
    发表于 10-21 16:25

    新一代嵌入式开发平台 AMD嵌入式软件和工具2025.1版现已推出

    抢先体验 SHEL 流程简化所有 AMD 嵌入式开发平台上的软件项目生成过程 Zephyr RTOS 兼容性已扩展至第二代 AMD Versal AI Edge 系列、Kria SOM
    的头像 发表于 08-20 09:15 4253次阅读

    嵌入式工程师为什么要学QT?

    、Clang、MSVC等,并提供了跨平台的编译和发布流程。 强大的集成开发环境(IDE) Qt Creator提供了代码编辑、调试、构建和发布功能,极大地提升了开发效率。 因此,Qt是嵌入式工程师值得学习的一个工具。 它能够帮助工程师提高开发效率,编写高质量的代码,并
    发表于 08-14 15:15

    【「Yocto项目实战教程:高效定制嵌入式Linux系统」阅读体验】+基础概念学习理解

    软件包的依赖关系、编译选项、配置参数等。掌握元数据的使用方法对于定制和优化嵌入式 Linux 系统至关重要。 BitBake BitBake 是 Yocto 项目的构建工具。通过学习这部分内容,我深入
    发表于 08-04 22:29

    【深度解析】硬件电路设计:如何确保嵌入式数据可靠性?

    嵌入式系统开发中,硬件电路设计是确保数据可靠性的关键环节。本期我们将重点探讨硬件设计中的两个重要方面:数据读写保护和掉电保护。硬件电路设计在嵌入式系统开发中,硬件电路设计对于确保
    的头像 发表于 07-30 11:35 890次阅读
    【深度解析】硬件电路设计:如何确保<b class='flag-5'>嵌入式</b><b class='flag-5'>数据</b>可靠性?

    如何导出Excel文件 -- excel_hm介绍 ##三方SDK##

    ; this.message = \'\'; this.showFileActions = false; // 构建表格数据 const tableData: ExcelTableData = { title
    发表于 06-30 17:57

    PROFINET接口嵌入式解决方案

    嵌入式PROFINET RT IRT MRP接口模块PNS-424为需要PROFINET通信功能的用户,提供PROFINET从站接口。 用户可通过串行接口,实现高速度,低延时过程数据传递,保证
    的头像 发表于 06-04 15:26 812次阅读
    PROFINET接口<b class='flag-5'>嵌入式</b>解决方案

    嵌入式开发入门指南:从零开始学习嵌入式

    特定功能的计算机系统,广泛应用于智能家居、工业控制、医疗设备、车载系统等领域。 2. 学习嵌入式开发的前置知识熟悉C语言编程掌握基本的数据结构与算法了解数字电路与微控制器原理熟悉Linux操作系统
    发表于 05-15 09:29