qt中使用QAxObject操作excel:读写操作指定单元格

使用QAxObject类必须在pro中加入axcontainer模块。

#include <QAxObject>加入头文件

就可以使使用此类的接口了:

首先打开excel表格文件:

QAxObject *excel = new QAxObject();//建立excel操作对象
excel->setControl("Excel.Application");//连接Excel控件
excel->setProperty("Visible", false);//不显示窗体看效果
excel->setProperty("DisplayAlerts", false);//不显示警告看效果
QAxObject *workbooks = excel->querySubObject("WorkBooks");
workbooks->dynamicCall("Open(const QString&)", path);//获取excel文件的路径
QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",1);//访问excel中的工作表中第一个单元格
 QAxObject * usedRange = worksheet->querySubObject("UsedRange");//获取文件sheet页

读:访问指定单元格内容信息,并赋值给变量: 

QAxObject *cell = excel->querySubObject("Cells(Int, Int)", 1, 1 );//访问第一行第一列的单元格中的数据
QString str = cell->dynamicCall("value").toString(); 

写:将指定数据写到指定单元格中并保存退出:

QAxObject* range1 = worksheet->querySubObject("Range(const QString&)", "A28"); // 假设我们要修改A1单元格 
 range1->dynamicCall("SetValue(const QVariant&)", QVariant(examopen.GPIB_35670_CH2_sensitivity)); // 设置单元格的值

workbook->dynamicCall("Save()");//保存

*注意:当文件被其他程序占用时,则写入不成功!

最后关闭文件;

workbook->dynamicCall( "Close(Boolean)", false );
excel->dynamicCall( "Quit(void)" );
delete excel;

 
 QAxObject *excel = new QAxObject();//建立excel操作对象
    excel->setControl("Excel.Application");//连接Excel控件
    excel->setProperty("Visible", false);//不显示窗体看效果
    excel->setProperty("DisplayAlerts", false);//不显示警告看效果
    QAxObject *workbooks = excel->querySubObject("WorkBooks");
    workbooks->dynamicCall("Open(const QString&)", "D:/lns/B06A00_database.xlsx");//获取excel文件的路径
    QAxObject *workbook = excel->querySubObject("ActiveWorkBook");
    QAxObject *worksheet = workbook->querySubObject("WorkSheets(int)",1);//访问excel中的工作表中第一个单元格
    QAxObject* range = worksheet->querySubObject("Range(const QString&)", "A27"); // 假设我们要修改A1单元格
    range->dynamicCall("SetValue(const QVariant&)", QVariant(examopen.GPIB_35670_CH1_sensitivity)); // 设置单元格的值
    QAxObject* range1 = worksheet->querySubObject("Range(const QString&)", "A28"); // 假设我们要修改A1单元格
    range1->dynamicCall("SetValue(const QVariant&)", QVariant(examopen.GPIB_35670_CH2_sensitivity)); // 设置单元格的值
QAxObject *cell = excel->querySubObject("Cells(Int, Int)", 1, 1 );//访问第一行第一列的单元格中的数据
 QString str = cell->dynamicCall("value").toString();
    workbook->dynamicCall("Save()");
    workbook->dynamicCall("Close()");
    excel->dynamicCall("Quit()");
    delete excel;

  • 15
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Linux上,可以使用Qt提供的QAxObject类来操作Microsoft Excel文件。以下是一个示例代码,演示如何读写Excel单元格: ```cpp #include <QCoreApplication> #include <QAxObject> #include <QDebug> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); QAxObject excel("Excel.Application"); excel.setProperty("Visible", false); // 隐藏Excel窗口 QAxObject *workbooks = excel.querySubObject("Workbooks"); if (!workbooks) { qCritical() << "Failed to get Workbooks object."; return -1; } QAxObject *workbook = workbooks->querySubObject("Open(const QString&)", "path/to/your/excel/file.xlsx"); if (!workbook) { qCritical() << "Failed to open Excel file."; return -1; } QAxObject *worksheet = workbook->querySubObject("Worksheets(int)", 1); // 打开第一个工作表 if (!worksheet) { qCritical() << "Failed to get Worksheet object."; return -1; } // 读取单元格数据 QAxObject *cell = worksheet->querySubObject("Cells(int,int)", 1, 1); // 获取第1行第1列的单元格 if (cell) { QVariant cellValue = cell->property("Value"); qDebug() << "Cell value:" << cellValue.toString(); delete cell; } // 写入单元格数据 QAxObject *newCell = worksheet->querySubObject("Cells(int,int)", 1, 2); // 获取第1行第2列的单元格 if (newCell) { newCell->setProperty("Value", "Hello Excel!"); delete newCell; } workbook->dynamicCall("Save()"); workbook->dynamicCall("Close()"); excel.dynamicCall("Quit()"); return a.exec(); } ``` 这里使用QAxObject类来打开Excel文件,获取工作表对象和单元格对象,并读取/写入单元格数据。请注意,您需要安装Microsoft Excel并确保其在系统路径可用。 另外,如果您的Excel文件格式是XLSX,您还可以使用Qt提供的QXlsx库来读写Excel文件。QXlsx是一个基于Qt的开源库,支持XLSX文件的读写操作

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值