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

    浏览量

    7231
  • BIN文件
    +关注

    关注

    0

    文章

    27

    浏览量

    8940
  • Linux开发
    +关注

    关注

    0

    文章

    44

    浏览量

    7613

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式应掌握的几种能力

    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 3604次阅读
    使用xmake+zig更优雅的进行<b class='flag-5'>嵌入式</b>系统开发

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

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

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

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

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

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

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

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

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

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

    飞凌嵌入式2025嵌入式及边缘AI技术论坛圆满结束

    飞凌嵌入式「2025嵌入式及边缘AI技术论坛」在深圳深铁皇冠假日酒店盛大举行,此次活动邀请到了200余位嵌入式技术领域的技术专家、企业代表和工程师用户,共享嵌入式及边缘AI技术的盛宴!
    的头像 发表于 04-28 13:57 3850次阅读
    飞凌<b class='flag-5'>嵌入式</b>2025<b class='flag-5'>嵌入式</b>及边缘AI技术论坛圆满结束

    嵌入式适合自学吗?

    构、时钟系统、电源管理、存储映射等。 嵌入式必学技术点↓↓↓ 1硬件与软件的结合 2实时性要求与资源限制 3跨领域知识整合 4调试与测试困难 二)缺乏专业指导 1)容易走弯路:自学嵌入式过程
    发表于 04-27 09:54

    飞凌嵌入式「2025嵌入式及边缘AI技术论坛」议程公布

    4月22日,飞凌嵌入式“2025嵌入式及边缘AI技术论坛”将在深圳举行,论坛以“新生态,智未来”为主题,旨在汇聚行业智慧,探讨嵌入式技术与边缘AI的深度融合与创新应用。
    的头像 发表于 04-02 15:12 1080次阅读
    飞凌<b class='flag-5'>嵌入式</b>「2025<b class='flag-5'>嵌入式</b>及边缘AI技术论坛」议程公布

    嵌入式主板的概述与发展

    随着科技的迅猛发展,嵌入式系统在现代电子产品中扮演着越来越重要的角色。嵌入式主板作为嵌入式系统的核心组件之一,承担着控制、处理和通讯等多种功能。本文将对嵌入式主板的基本概念、构成部分、
    的头像 发表于 01-13 16:30 1191次阅读
    <b class='flag-5'>嵌入式</b>主板的概述与发展

    ARM架构嵌入式主板特点

    嵌入式主板可以理解为嵌入在设备中用于控制和数据处理的CPU板,也就是设备的“大脑”。当主板嵌入到设备中,当然对主板的体积和功耗会有更严格的要求(嵌入
    的头像 发表于 12-31 16:03 1860次阅读
    ARM架构<b class='flag-5'>嵌入式</b>主板特点

    新手怎么学嵌入式?

    基本的概念。嵌入式系统是一种将计算机技术嵌入到特定设备中的系统,它通常具有特定的功能和有限的资源。你需要学习一些计算机基础知识,如数据结构、操作系统、计算机组成原理等。这些知识将帮助你理解嵌入
    发表于 12-12 10:51

    什么是嵌入式人工智能

    嵌入式人工智能是指将人工智能技术应用于嵌入式系统中的一种技术。嵌入式系统是嵌入到其他设备或系统中的计算机系统,通常用于控制、监测或执行特定任务,如智能手机、智能家居设备、智能汽车等中的
    的头像 发表于 12-11 09:23 1526次阅读
    什么是<b class='flag-5'>嵌入式</b>人工智能