qt和C++使用QAxObject读取xlsx
时间: 2025-03-24 19:11:24 浏览: 105
要在Qt和C++中通过`QAxObject`读取XLSX文件,可以借助Windows平台上的COM组件Microsoft Excel对象模型来操作Excel文件。以下是详细步骤以及关键点:
### 步骤说明
#### 1. 确保安装了Office
首先需要确保系统上已安装支持COM自动化功能的Microsoft Office套件(例如Excel),因为这种方式依赖于Excel的应用程序。
#### 2. 配置项目以便使用ActiveQt
在`.pro`文件中添加以下行以启用对ActiveQt的支持:
```plaintext
QT += axcontainer
```
这一步会引入必要的模块用于处理COM交互。
#### 3. 创建并初始化Excel应用程序实例
创建一个指向Excel应用的`QAxObject`指针,并启动Excel进程而不显示界面:
```cpp
QAxObject *excelApplication = new QAxObject("Excel.Application");
if (excelApplication->isNull()) {
qDebug() << "Failed to create Excel application";
} else {
excelApplication->dynamicCall("SetVisible(bool)", false);
}
```
#### 4. 打开工作簿
将指定路径下的.xlsx文件加载到内存中作为活动的工作簿。
```cpp
QString filePath = "path_to_your_file.xlsx"; // 替换为实际文件名
QAxObject* workbooks = excelApplication->querySubObject("Workbooks");
workbook = workbooks->querySubObject("Open(const QString&)", QDir::toNativeSeparators(filePath));
if (!workbook) {
qDebug()<<"Cannot open workbook!";
}
```
#### 5. 访问特定的工作表数据
选择想要访问的第一个sheet或其他命名sheets:
```cpp
QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1);
// 或者按照名称查询: querySubObject("Worksheets(const QString &)", sheetName)
```
之后就可以遍历单元格获取内容啦!
示例循环打印所有非空cell值代码片段如下所示:
```cpp
int rows = worksheet->property("UsedRange.Rows.Count").toInt();
int cols = worksheet->property("UsedRange.Columns.Count").toInt();
for(int i=1;i<=rows;i++) {
for(int j=1; j<=cols;j++) {
QVariant cellValue;
if( !(cellValue = ((QAxObject*)worksheet->querySubObject(QString("Cells(%1,%2)").arg(i).arg(j)))->property("Value")) .isNull()){
qDebug()<<cellValue.toString();
}
}
}
```
完成读取任务后别忘了关闭文档及退出excle服务哦~
---
### 注意事项
- 这种技术仅限于windows环境有效果,在其他操作系统下不可运行;
- 如果目标电脑未装office软件,则此方法无法奏效;
阅读全文
相关推荐

















