最近有一個嵌入式Excel表格數據導出的需求:應用軟件運行于嵌入式Linux平臺上,在設備運行過程中,存儲了許多數據,這些數據想以表格的形式導出。
考慮到Windows平臺的普遍性,需要將數據以excel表格形式導出,故選擇了一個開源庫:QtXlsxWriter,本文主要記錄其編譯構建過程。
從下列地址https://github.com/dbzhang800/QtXlsxWriter獲取安裝包,將源碼包解壓縮,目錄結構如下圖所示:
example目錄下存放的是示例Demo。
src目錄下存放的是xlsx的源碼。
tests目錄下存放的是測試工程。
QtXlsxWriter可以通過QtCreator來編譯構建,所以我們打開安裝在linux平臺上的QtCreator,然后使用QtCreator打開QtXlsxWriter項目(選擇源碼目錄下的xxx.pro文件)。選擇對應的編譯構建套件后,如下圖所示:
點擊項目管理視圖中的頂級目錄,單擊右鍵,選擇“構建”,即可構建QtXlsxWriter:
編譯成功后,將在源碼目錄的同級下創建構建輸出目錄,該目錄結構如下圖所示:
bin :用于存放二進制文件。(該目錄為空)
examples:示例Demo的編譯構建輸出目錄。
include:該目錄存放關于QtXlsxWriter的頭文件:
lib:該目錄用于存放QtXlsxWriter的庫目錄:
mkspecs:該目錄是Qt的模塊化標識目錄,用于向Qt開發環境添加Xlsx:
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;i10;?++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的編譯構建目錄下,將生成如下文件:
在終端運行一下生成的程序(此處是chart):
運行完成后,將在同級目錄下創建兩個文件:如下圖所示:
注:由于在ubuntu編譯構建,沒有安裝能打開xlsx的應用軟件,故將其拷貝到Windows下使用wps打開。打開后圖表如下圖所示:
以上過程是在Ubuntu18.04下進行的,如果想讓QtXlsxWriter運行于嵌入式linux平臺上,只需要在QtCreator中選擇編譯構建套件時,選擇對應的交叉編譯套件編譯,在編譯完成后,將構建出的庫文件復制到Linux的鏈接庫目錄下(一般為/usr/lib),則可以在嵌入式Linux平臺上使用QtXlsxWriter了。
審核編輯:劉清
-
QTcreator
+關注
關注
0文章
11瀏覽量
6870 -
BIN文件
+關注
關注
0文章
26瀏覽量
8389 -
Linux開發
+關注
關注
0文章
34瀏覽量
6940
原文標題:Excel表格數據導出,這個庫不錯
文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
新手怎么學嵌入式?
傳統電子表格Excel和Teable多維表格數據庫的區別?
什么是嵌入式?一文讀懂嵌入式主板
何為Teable多維表格數據庫,它僅僅是一個在線的智能表格嗎?
嵌入式主板是什么意思?嵌入式主板全面解析
嵌入式常用數據結構有哪些
嵌入式linux開發的基本步驟有哪些?
學習hypervisor嵌入式產品安全設計
嵌入式QT常見開發方式有哪些?
如何提升嵌入式編程能力?
基于AMD、ARM、Intel和NVIDIA技術構建的嵌入式工控機
![基于AMD、ARM、Intel和NVIDIA技術<b class='flag-5'>構建</b>的<b class='flag-5'>嵌入式</b>工控機](https://file1.elecfans.com/web2/M00/E8/00/wKgZomZNtzmAGQgpAAB9k1TqKZk418.png)
評論