QAxObject 读写 excel_qaxobject写数据

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>


感谢网上提供参考资料的大神们!


 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值