【Qt】Qt读取/修改Excel文件

前置条件

在Qt项目的 .pro 文件中添加关键代码,然后保存。

QT += axcontainer

在需要操作excel的 .cpp 文件中添加头文件

#include <QCoreApplication>
#include <QAxObject>

示例展示

/* ---- 启动Excel组件,创建Excel对象 ---- */
QAxObject *testExcel = new QAxObject("Excel.Application");
testExcel->dynamicCall("SetVisible(bool)", false);
testExcel->SetProperty("Visible", false);
/* ---- 打开Excel文件工作簿,获取所有工作表 ---- */
QAxObject *workBooks = testExcel->querySubObject("WorkBooks");
workBooks->dynamicCall("Open(const QString&)", "C:/Users/22718/Desktop/testExcel.xlsx"); // 这里换为自己的excel文件路径
/* ---- 选择需要使用的工作表(这里选择的是工作表1) ---- */
QAxObject *workbook = testExcel->querySubObject("ActiveWorkBook");
QAxObject *worksheet = workbook->querySubObject("Sheet(int)", 1);
/* ---- 读取表中的单元格(示例里面读取的是表中单元格B3的数据) ---- */
QAxObject *cell1 = worksheet->querySubObject("Range(QVariant, QVariant)", "B3");
qDebug()<<"B3原数据:"<<cell1->dynamicCall("Value2()").toString();
/* ---- 修改单个单元格中的数据 ---- */
cell1->setProperty("Value", "10.23");
qDebug()<<"B3修改后的数据:"<<cell1->dynamicCall("Value2()").toString();
/* ---- 将单例或单行中某一段的数据修改为相同数据 ---- */
QAxObject *cellF3ToF58 = worksheet->querySubObject("Range(QString)", "F3:F58");
cellF3ToF58->setProperty("Value", "4.56");

/* ---- 其他 ---- */
QAxObject *usedRange = worksheet->querySubObject("UsedRange"); // 获取使用范围
QAxObject *rows = usedRange->querySubObject("Rows"); // 获取所有行
int rowCount = rows->property("Count").toInt(); // 行数
QAxObject *cols = usedRange->querySubObject("Columns"); // 获取所有列
int colCount = cols->property("Count").toInt(); // 列数
// 输出所有单元格的值
for(int i=1; i <= rowCount ; i++){
	for(int j=1; j <= colCount ; j++){
		qDebug()<<worksheet->querySubObject("Cells(int, int)", i, j)->property("Value").toString();
	}
}
/* ---- 保存并关闭文件 ---- */
workbook->dynamicCall("SaveAs(const QString&)", QDir::toNativeSeparators("C:\\Users\\22718\\Desktop\\updateExcel.xlsx"));
workbook->dynamicCall("Close()"); // 关闭工作簿
worksheet->clear(); // 释放所有工作表
testExcel->dynamicCall("Quit()"); // 退出Excel
delete testExcel; // 释放指针

可能遇到的错误

QAxBase: Error calling IDispatch member SaveAs: Exception thrown by server
             Code       : -2146827284
             Source     : Microsoft Excel
             Description: ????? Workbook ? SaveAs ??
             Help       : xlmain11.chm
         Connect to the exception(int,QString,QString,QString) signal to catch this exception

错误原因及解决方法

错误原因:保存excel文件时,路径错误。
解决方法:将路径中的 / 替换为 \\ .

文章参考

qt操作excel参考: https://blog.csdn.net/qilei2010/article/details/122610164.
qt操作excel报错解决方法参考: https://blog.csdn.net/qq_41488943/article/details/102838380.

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值