本文从我原先发布在 CSDN 的文章迁移而来,原文链接:https://blog.csdn.net/wang112031/article/details/103655514。

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 原始数据及读取的数据截图