前置条件
在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.