有一個嵌入式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 <QtCore>
#include "xlsxdocument.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"using namespace QXlsx;int main()
{//![0] 創建xlsx文檔對象。向單元格總寫入數據Document xlsx;for (int i = 1; i < 10; ++i) {xlsx.write(i, 1, i * i * i); // A1:A9xlsx.write(i, 2, i * i); // B1:B9xlsx.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);// Will generate three lines.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);// Will generate two lines.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文件。Document xlsx2("Book1.xlsx");xlsx2.saveAs("Book2.xlsx");return 0;
}
選中項目管理視圖中的example目錄,依次展開,選擇chart
目錄,右鍵單擊,選中“構建”選項,即可對chart示例演示進行構建。
然后在chart的編譯構建目錄下,將生成如下文件:
?
?
?以上過程是在Ubuntu18.04下進行,如果想讓QtXlsxWriter運行于嵌入式linux平臺上,只需要在QtCreator中選擇編譯構建套件時,選擇對應的交叉編譯套件,在編譯完成后,將構建出的庫文件復制到Linux的鏈接庫目錄下(一般為/usr/lib),則可以在嵌入式Linux平臺上使用QtXlsxWriter了。
?