qt 使用qtxlsx 讀寫excel


qt 使用qtxlsx 讀寫excel

 

https://github.com/dbzhang800/QtXlsxWriter 下載qtxlsx地址

QtXlsx is a library that can read and write Excel files. It doesn't require Microsoft Excel and can be used in any platform that Qt5 supported. The library can be used to

  • Generate a new .xlsx file from scratch
  • Extract data from an existing .xlsx file
  • Edit an existing .xlsx file

Getting Started

  • For linux user, if your Qt is installed through package manager tools such "apt-get", make sure that you have installed the Qt5 develop package qtbase5-private-dev

Usage(1): Use Xlsx as Qt5's addon module

Building the module

Note: Perl is needed in this step.

  • Download the source code.

  • Put the source code in any directory you like

  • Go to top directory of the project in a terminal and run

    qmake
    make make install 

The library, the header files, and others will be installed to your system.

make html_docs can be used to generate documentations of the library, and make check can be used to run unit tests of the library.

Using the module

  • Add following line to your qmake's project file:
    QT += xlsx 
  • Then, using Qt Xlsx in your code
    #include <QtXlsx> int main() { QXlsx::Document xlsx; xlsx.write("A1", "Hello Qt!"); xlsx.saveAs("Test.xlsx"); return 0; }

Usage(2): Use source code directly

The package contains a qtxlsx.pri file that allows you to integrate the component into applications that use qmake for the build step.

  • Download the source code.

  • Put the source code in any directory you like. For example, 3rdparty:

    |-- project.pro |-- .... |-- 3rdparty\ | |-- qtxlsx\ | | 
  • Add following line to your qmake project file:
    include(3rdparty/qtxlsx/src/xlsx/qtxlsx.pri) 

Note: If you like, you can copy all files from src/xlsx to your application's source path. Then add following line to your project file:

include(qtxlsx.pri) 
 > **Note**: If you do not use qmake, you need to define the following macro manually  > ``` XLSX_NO_LIB 
  • Then, using Qt Xlsx in your code
    #include "xlsxdocument.h" int main() { QXlsx::Document xlsx; xlsx.write("A1", "Hello Qt!"); xlsx.saveAs("Test.xlsx"); return 0; }

在構建的時候,可能會有如下的錯誤,

 

xlsxzipreader.cpp: In member function ‘void QXlsx::ZipReader::init()’:
xlsxzipreader.cpp:51:66: error: conversion from ‘QVector<QZipReader::FileInfo>’ to non-scalar type ‘QList<QZipReader::FileInfo>’ requested QList<QZipReader::FileInfo> allFiles = m_reader->fileInfoList();
 

 

這里只需要吧出錯的文件添加 :
 #include <QVector>
然后把出錯的地方的"QList" 用"QVector" 替換掉重新構建就可以了。

 

對於Qt Xlsx ( QtXlsxWriter ) 的安裝請參考: 
http://blog.csdn.net/woshidahuaidan2011/article/details/52724452 
這里主要介紹其基本的編程使用方法。 
首先我們想到就是對xlsx文件進行讀寫,因此我們有如下的代碼:

#include <QtCore> #include "xlsxdocument.h" #include "xlsxformat.h" #include "xlsxcellrange.h" #include "xlsxchart.h" int main() { QXlsx::Document xlsx("book1.xlsx");/*打開一個book1的文件*/ QXlsx::Format format1;/*設置該單元的樣式*/ format1.setFontColor(QColor(Qt::red));/*文字為紅色*/ format1.setPatternBackgroundColor(QColor(152,251,152));/*北京顏色*/ format1.setFontSize(15);/*設置字體大小*/ format1.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*橫向居中*/ format1.setBorderStyle(QXlsx::Format::BorderDashDotDot);/*邊框樣式*/ xlsx.write("A1", "Hello Qt!", format1);/*寫入文字,應該剛才設置的樣式*/ xlsx.write(2, 1, 12345, format1);/*寫入文字,應該剛才設置的樣式*/ QXlsx::Format format2;/*重新設置另一個單元的樣式*/ format2.setFontBold(true);/*設置加粗*/ format2.setFontUnderline(QXlsx::Format::FontUnderlineDouble);/*下雙划線*/ format2.setFillPattern(QXlsx::Format::PatternLightUp);/*填充方式*/ xlsx.write("A4", "=44+33", format2);/*寫入文字,應該剛才設置的樣式*/ xlsx.write("C4", true, format2); xlsx.saveAs("book1.xlsx");/*保存*/ QXlsx::Document xlsx2("Book1.xlsx");/*復制book1到book2*/ xlsx2.saveAs("Book2.xlsx"); return 0; }

 

其運行效果如下: 
運行效果

接下來我們處理數據的是很多時候需要插入折線圖、餅狀圖等等來圖像化的處理數據,因此我們可以可以在原有代碼上添加一段代碼,使之添加一個sheet而且插入餅狀圖及其條形圖:

#include <QtCore> #include "xlsxdocument.h" #include "xlsxformat.h" #include "xlsxcellrange.h" #include "xlsxchart.h" int main() { QXlsx::Document xlsx("book1.xlsx");/*打開一個book1的文件*/ QXlsx::Format format1;/*設置該單元的樣式*/ format1.setFontColor(QColor(Qt::red));/*文字為紅色*/ format1.setPatternBackgroundColor(QColor(152,251,152));/*北京顏色*/ format1.setFontSize(15);/*設置字體大小*/ format1.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*橫向居中*/ format1.setBorderStyle(QXlsx::Format::BorderDashDotDot);/*邊框樣式*/ xlsx.write("A1", "Hello Qt!", format1);/*寫入文字,應該剛才設置的樣式*/ xlsx.write(2, 1, 12345, format1);/*寫入文字,應該剛才設置的樣式*/ QXlsx::Format format2;/*重新設置另一個單元的樣式*/ format2.setFontBold(true);/*設置加粗*/ format2.setFontUnderline(QXlsx::Format::FontUnderlineDouble);/*下雙划線*/ format2.setFillPattern(QXlsx::Format::PatternLightUp);/*填充方式*/ xlsx.write("A4", "=44+33", format2);/*寫入文字,應該剛才設置的樣式*/ xlsx.write("C4", true, format2); if(!xlsx.selectSheet("ziv")){/*在當前打開的xlsx文件中,找一個名字為ziv的sheet*/ xlsx.addSheet("ziv");//找不到的話就添加一個名為ziv的sheet } for (int i=10; i<20; ++i) {/*寫入一串數字*/ xlsx.write(i, 1, i*i*i); //A10:A19 xlsx.write(i, 2, i*i); //B10:B19 xlsx.write(i, 3, i*i-1); //C10:C19 } QXlsx::Chart *pieChart = xlsx.insertChart(3, 5, QSize(300, 300));/*在3行5列的位置插入一個圖標*/ pieChart->setChartType(QXlsx::Chart::CT_Pie);/*插入一個餅形圖*/ pieChart->addSeries(QXlsx::CellRange("A10:A19"));/*餅形圖添加數據*/ pieChart->addSeries(QXlsx::CellRange("B10:B19")); pieChart->addSeries(QXlsx::CellRange("C10:C19")); QXlsx::Chart *barChart = xlsx.insertChart(3, 13, QSize(300, 300));/*在3行13列的位置插入一個圖標*/ barChart->setChartType(QXlsx::Chart::CT_Bar);/*條形圖*/ barChart->addSeries(QXlsx::CellRange("A10:C19"));/*給條形圖加入數據*/ xlsx.saveAs("book1.xlsx");/*保存*/ QXlsx::Document xlsx2("Book1.xlsx");/*復制book1到book2*/ xlsx2.saveAs("Book2.xlsx"); return 0; } 

 

上面代碼中運行效果如下: 
添加sheet

圖表

很多時候我們還需要添加圖表來美化表格,代碼如下:

#include <QtCore> #include <QtGui> #include "xlsxdocument.h" #include "xlsxformat.h" #include "xlsxcellrange.h" #include "xlsxchart.h" int main() { QXlsx::Document xlsx("book1.xlsx");/*打開一個book1的文件*/ QXlsx::Format format1;/*設置該單元的樣式*/ format1.setFontColor(QColor(Qt::red));/*文字為紅色*/ format1.setPatternBackgroundColor(QColor(152,251,152));/*北京顏色*/ format1.setFontSize(15);/*設置字體大小*/ format1.setHorizontalAlignment(QXlsx::Format::AlignHCenter);/*橫向居中*/ format1.setBorderStyle(QXlsx::Format::BorderDashDotDot);/*邊框樣式*/ xlsx.write("A1", "Hello Qt!", format1);/*寫入文字,應該剛才設置的樣式*/ xlsx.write(2, 1, 12345, format1);/*寫入文字,應該剛才設置的樣式*/ QXlsx::Format format2;/*重新設置另一個單元的樣式*/ format2.setFontBold(true);/*設置加粗*/ format2.setFontUnderline(QXlsx::Format::FontUnderlineDouble);/*下雙划線*/ format2.setFillPattern(QXlsx::Format::PatternLightUp);/*填充方式*/ xlsx.write("A4", "=44+33", format2);/*寫入文字,應該剛才設置的樣式*/ xlsx.write("C4", true, format2); if(!xlsx.selectSheet("ziv")){/*在當前打開的xlsx文件中,找一個名字為ziv的sheet*/ xlsx.addSheet("ziv");//找不到的話就添加一個名為ziv的sheet } for (int i=10; i<20; ++i) {/*寫入一串數字*/ xlsx.write(i, 1, i*i*i); //A10:A19 xlsx.write(i, 2, i*i); //B10:B19 xlsx.write(i, 3, i*i-1); //C10:C19 } QXlsx::Chart *pieChart = xlsx.insertChart(3, 5, QSize(300, 300));/*在3行5列的位置插入一個圖標*/ pieChart->setChartType(QXlsx::Chart::CT_Pie);/*插入一個餅形圖*/ pieChart->addSeries(QXlsx::CellRange("A10:A19"));/*餅形圖添加數據*/ pieChart->addSeries(QXlsx::CellRange("B10:B19")); pieChart->addSeries(QXlsx::CellRange("C10:C19")); QXlsx::Chart *barChart = xlsx.insertChart(3, 13, QSize(300, 300));/*在3行13列的位置插入一個圖標*/ barChart->setChartType(QXlsx::Chart::CT_Bar);/*條形圖*/ barChart->addSeries(QXlsx::CellRange("A10:C19"));/*給條形圖加入數據*/ QImage image(40, 100, QImage::Format_RGB32);/*新建一個Qimage,大小40*100*/ image.fill(Qt::green);/*填充綠色*/ xlsx.insertImage(1, 1, image);/*插入圖片*/ xlsx.saveAs("book1.xlsx");/*保存*/ QXlsx::Document xlsx2("Book1.xlsx");/*復制book1到book2*/ xlsx2.saveAs("Book2.xlsx"); return 0; } 

 

效果如下: 
圖像

到此為止對於Qt Xlsx 的使用應該可以滿足大部分的需求,如有疑問歡迎留言指正,原文地址: 
http://blog.csdn.net/woshidahuaidan2011/article/details/53349163

堅持就是勝利


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM