void on_Quit_clicked();
void on_read_clicked();
private:
Ui::MainWindow *ui;
QAxObject *excel;
QAxObject *workbooks;
QAxObject *workbook;
QAxObject *worksheets;
QAxObject *worksheet;
QAxObject *range;
QAxObject *cell;
QList<QVariant> allRowData;
};
#endif // MAINWINDOW_H
//mainwindow.cpp
#include “mainwindow.h”
#include “ui_mainwindow.h”
QString path = “E:/test.xlsx”;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//连接excel
excel = new QAxObject("Excel.Application");
//是否可视化excel
excel->dynamicCall("SetVisible(bool Visible)", true);
//是否弹出警告窗口
excel->setProperty("DisplayAlerts", false);
//获取工作簿集合
workbooks = excel->querySubObject("WorkBooks");
//新建一个工作簿
workbooks->dynamicCall("Add");
//获取当前工作簿
workbook = excel->querySubObject("ActiveWorkBook");
//获取工作表格集合
worksheets = workbook->querySubObject("Sheets");
//获取当前工作表格1,即sheet1
worksheet = worksheets->querySubObject("Item(int)", 1);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_Write_clicked()
{
//产生数据
for(int row = 1; row <=1000; row++) {
QList aRowData;
for(int column = 1; column <= 2; column++) {
aRowData.append(QVariant(row*column));
}
allRowData.append(QVariant(aRowData));
}
//选取范围
range = worksheet->querySubObject("Range(const QString)", "A1:B1000");
//批量写入
range->dynamicCall("SetValue(const QVariant&", QVariant(allRowData));
//设置字体大小
range->querySubObject("Font")->setProperty("Size", 30);
//获取单元格
cell = worksheet->querySubObject("Cells(int, int", 1, 1);
//储存一个字符串数据至表格
cell->dynamicCall("setValue(const QVariant&", QVariant("abc"));
//读取单元格数据
QString str = cell->dynamicCall("Value2()").toString();
qDebug()<<"The value of cell is "<< str <<endl;
//调整行高
worksheet->querySubObject("Range(const QString&", "1:1")->setProperty("RowHeight", 60);
//保存至文件注意一定要用QDir::toNativeSeparators将路径中的"/"转换为"\",不然一定保存不了。
workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators(path));
workbook->dynamicCall("Close()");
}
void MainWindow::on_Quit_clicked()
{
excel->dynamicCall("Quit()");
}
void MainWindow::on_read_clicked()
{
//获取工作簿集合
workbooks = excel->querySubObject(“WorkBooks”);
//打开一个工作簿
workbooks->dynamicCall(“Open(const QString&)”, QDir::toNativeSeparators(path));
//获取当前工作簿
workbook = excel->querySubObject(“ActiveWorkBook”);
//获取工作表格集合
worksheets = workbook->querySubObject(“Sheets”);
//获取当前工作表格1,即sheet1
worksheet = worksheets->querySubObject(“Item(int)”, 1);
QVariant var;
//读取当前工作表所有数据
QAxObject *usedRange = worksheet->querySubObject("UsedRange");
var = usedRange->dynamicCall("Value");
QVariantList varRows = var.toList();
const int rowCount = varRows.size();
QVariantList rowData;
for(int i = 0; i<rowCount; ++i) {
rowData = varRows[i].toList();
qDebug()<< rowData.at(1);
}
workbook->dynamicCall("Close()");
}
QAxObject* querySubObject(const char *name, QList &vars);
使用上面这个函数时,要注意,虽然获取的子对象是由父对象统一管理,但他们是在父对象被析构时进行销毁的,所以如果操作单元格时,频繁获取单元格对象,需要手动del 一下。
[本工程源码]( )
## 相关资料
[QtXlsx 的配置]( )
[QtXlsx 使用例程]( )
**参考资料:**
1. <https://blog.csdn.net/czyt1988/article/details/52121360>
2. <https://blog.csdn.net/qq_35057840/article/details/54318443>
3. <https://www.cnblogs.com/woxinfeixiang2015/p/7677295.html>
感谢网上提供参考资料的大神们!