最近项目比较忙,许久没写博客了,想着还是需要定期整理下学到的和用到的新东西,才有沉淀。刚好最近使用Qt时需要读取excel文件的数据,于是在github找了一个开源库QXlsx,Star数还比较多,应该靠谱,下面就来记录下整个使用过程吧。
下载源码
话不多说,肯定是先把源码撸下来。
git clone https://github.com/QtExcel/QXlsx
编译源码
- 使用Qt Creator打开源码工程(我这里用的Qt版本是5.8.0)
- 配置工程,然后选择release,点击左下角锤子进行构建。
- 在构建目录下找到编译产物
libQXlsx.a
使用QXlsx
1.创建Qt工程
配置编译套件,生成UI基础模板工程。
添加两个按键、一个Tablewidget控件,用户打开、保存以及显示excel表内容。
2. 添加QXlsx库和头文件
将编译生成的QXlsx库文件和头文件目录(QXlsx\QXlsx\header),拷贝到刚刚新建的工程下:
右键工程目录,添加现有文件,选择header目录下所有头文件(选择文件是ctrl+A可全选):
右键工程目录,添加库… ,选择外部库,然后点击浏览选择库文件,选择文件后点击下一步、完成即可。
配置完成后,可以在pro文件中看到如下内容:
3. 使用QXlsx库的函数接口
话不多说,直接上代码,供大家参考:
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QFileDialog>
#include <QDebug>
#include "header/xlsxdocument.h"
#include "header/xlsxchartsheet.h"
#include "header/xlsxcellrange.h"
#include "header/xlsxchart.h"
#include "header/xlsxrichstring.h"
#include "header/xlsxworkbook.h"
using namespace QXlsx;
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = 0);
~Widget();
private slots:
void on_pushButton_open_clicked();
void on_pushButton_save_clicked();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_open_clicked()
{
QString filepath = QFileDialog::getOpenFileName(this, "打开文件", ".", "*.xlsx");
if(filepath.isEmpty())
return;
Document xlsxR(filepath);
if (xlsxR.load())
{
ui->tableWidget->setRowCount(10); // 显示10行10列
ui->tableWidget->setColumnCount(10);
QStringList header;
header << "A" << "B"<< "C"<< "D"<< "E"<< "F"<< "G"<< "H"<< "I"<< "J";
ui->tableWidget->setHorizontalHeaderLabels(header);
for(int row = 0; row < 10; row++)
{
for(int col = 0; col < 10; col++)
{
Cell* cell = xlsxR.cellAt(row+1, col+1); // 注意:tablewidget控件的row和col是从0开始的,QXlsx的row和col是从1开始的
if ( cell != NULL )
{
ui->tableWidget->setItem(row, col, new QTableWidgetItem(cell->readValue().toString()));
ui->tableWidget->item(row, col)->setTextAlignment(Qt::AlignCenter); // 居中
QVariant var = cell->readValue();
qDebug() << var;
}
}
}
}
}
void Widget::on_pushButton_save_clicked()
{
QXlsx::Document xlsxW;
for(int row = 0; row < 10; row++)
{
for(int col = 0; col < 10; col++)
{
xlsxW.write(row+1, col+1, QVariant(ui->tableWidget->item(row, col)->text()));
}
}
QString savefile = QFileDialog::getSaveFileName(this, "打开文件", ".", "*.xlsx");
if(!savefile.isEmpty())
xlsxW.saveAs(savefile); // save the document as 'Test.xlsx'
}
编译运行后:
新建一个excel表格,写一些测试数据,如下图所示:
点击打开,选择文件后,显示效果如下,成功读取出excel中的数据并显示到了tablewidget控件中:
点击修改其中任意一个单元格的数据:
点击保存,然后打开生成的文件,可以看到成功的将tablewidget控件里的数据写入到excel文件中: