Qt 操作Excel 有两种方式: 一种使用 Qt + QAxObject操作Excel,这种方式运行的主机需要安装Microsoft Excel,Qt 利用QAxObject com接口操作Microsoft Excel 软件实现Excel 读写;第二种就是用第三的库实现Excel 读写。常用的库和使用限制如下:
这里使用QXlsx 下载地址如下:https://github.com/QtExcel/QXlsx
使用第三方开源库,一般有两种方法:一种编译成静态库,新建项目直接调用静态库,好处每次创建项目都不需要重复编译开源库;另外一种方式就是以源码的方式加入自己的项目工程,这样每次都会重新开源库源码。
这里以源码形式加入项目工程测试,下载代码解压后将QXlsx 源码目录,并在自己的项目文件pro加入路径即可:
QXLSX_PARENTPATH=./QXlsx
QXLSX_HEADERPATH=./QXlsx/header/
QXLSX_SOURCEPATH=./QXlsx/source/
include(QXlsx/QXlsx.pri)
测试代码如下:
#include "xlsxdocument.h"
#include "xlsxchartsheet.h"
#include "xlsxcellrange.h"
#include "xlsxchart.h"
#include "xlsxrichstring.h"
#include "xlsxworkbook.h"
using namespace QXlsx;
void MainWindow::readxlsx()
{
Document xlsxR("1.xlsx");
if ( xlsxR.load() ) // load excel file
{
qDebug() << "[debug] success to load xlsx file.";
int row, col;
QVariant var1, var2;
Cell* cell;
QXlsx::Workbook *workBook = xlsxR.workbook();
QXlsx::Worksheet *workSheet = static_cast<QXlsx::Worksheet*>(workBook->sheet(0));
qDebug() << "rowCount = "<< workSheet->dimension().rowCount() << "colCount = "<< workSheet->dimension().columnCount();
for(row = 2; row < workSheet->dimension().rowCount(); row++)
{
cell = xlsxR.cellAt(row, 1); // get cell pointer.
if ( cell != NULL )
{
var1 = cell->readValue(); // read cell value (number(double), QDateTime, QString ...)
}
cell = xlsxR.cellAt(row, 2); // get cell pointer.
if ( cell != NULL )
{
var2 = cell->readValue(); // read cell value (number(double), QDateTime, QString ...)
}
qDebug()<<"row:"<<row<<var1.toDate().toString("yyyy/MM/dd")<< var2.toFloat();
}
}
else
{
qDebug() << "failed to load xlsx file.";
}
}
Excel 原始数据及读取的数据截图