找回密码
 立即注册
收起左侧

Qt 能否直接读写EXCEL文件

7
回复
13859
查看
[复制链接]

尚未签到

来源: 2013-6-21 11:11:23 显示全部楼层 |阅读模式
1Qter豆
我使用的Qt 软件是开源的,是否支持读写EXCEL文件。

最佳答案

回复

使用道具 举报

累计签到:4 天
连续签到:1 天
2013-6-21 11:11:24 显示全部楼层
用QAxObject
  1. void TestReadExcel::readExcel()
  2. {
  3.   QAxObject *excel = NULL;
  4.      QAxObject *workbooks = NULL;
  5.      QAxObject *workbook = NULL;

  6.     excel = new QAxObject("Excel.Application");
  7.      if (!excel)
  8.      {
  9.          QMessageBox::critical(this, "错误信息", "EXCEL对象丢失");
  10.          return;
  11.      }
  12.      excel->dynamicCall("SetVisible(bool)", false);
  13.      workbooks = excel->querySubObject("WorkBooks");
  14.      workbook = workbooks->querySubObject("Open(QString, QVariant)", QString(tr("d:\\test.xls")));
  15.      QAxObject * worksheet = workbook->querySubObject("WorkSheets(int)", 1);//打开第一个sheet

  16. //QAxObject * worksheet = workbook->querySubObject("WorkSheets");//获取sheets的集合指针
  17.   //int intCount = worksheet->property("Count").toInt();//获取sheets的数量


  18.     QAxObject * usedrange = worksheet->querySubObject("UsedRange");//获取该sheet的使用范围对象
  19.      QAxObject * rows = usedrange->querySubObject("Rows");
  20.      QAxObject * columns = usedrange->querySubObject("Columns");
  21.      /*获取行数和列数*/
  22.      int intRowStart = usedrange->property("Row").toInt();
  23.      int intColStart = usedrange->property("Column").toInt();
  24.      int intCols = columns->property("Count").toInt();
  25.      int intRows = rows->property("Count").toInt();
  26.      /*获取excel内容*/
  27.      for (int i = intRowStart; i < intRowStart + intRows; i++)  //行
  28.      {
  29.          for (int j = intColStart; j < intColStart + intCols; j++)  //列
  30.          {
  31.              QAxObject * cell = worksheet->querySubObject("Cells(int,int)", i, j );  //获取单元格
  32.             // qDebug() << i << j << cell->property("Value");         //*****************************出问题!!!!!!
  33.     qDebug() << i << j <<cell->dynamicCall("Value2()").toString(); //正确
  34.          }
  35.      }
  36.   workbook->dynamicCall("Close (Boolean)", false);

  37. //同样,设置值,也用dynamimcCall("SetValue(const QVariant&)", QVariant(QString("Help!")))这样才成功的。。

  38. //excel->dynamicCall("Quit (void)");
  39.   delete excel;//一定要记得删除,要不线程中会一直打开excel.exe
  40. }
复制代码
回复

使用道具 举报

尚未签到

2013-6-24 10:39:33 显示全部楼层
oishi731 发表于 2013-6-21 12:04
用QAxObject

你用的是哪个版本的Qt,我的程序编译不通过。
QAxobject 对象没有元素
网上资料介绍,读写EXCEL文件,需要在.pro文件中添加
CONFIG += qaxcontainer
但是编译时提示

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2013-6-28 00:20:04 显示全部楼层
回复

使用道具 举报

累计签到:2 天
连续签到:1 天
2013-6-28 21:09:11 显示全部楼层
这里介绍了一种方法,不需要QAxObject,不过控制能力也相对差很多,只能进行数据的读写,无法控制格式
回复

使用道具 举报

尚未签到

2013-7-3 17:09:00 显示全部楼层
夏叫兽 发表于 2013-6-28 00:20
这里有介绍

你看第我上面的回复了吗?为什么总是出现那个问题!
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2013-7-7 21:04:01 显示全部楼层
xuzhu.ok 发表于 2013-7-3 17:09
你看第我上面的回复了吗?为什么总是出现那个问题!

因为你工程里没加 CONFIG   += qaxcontainer这个,所以提示找不到!请仔细阅读我推荐的那个的链接,谢谢!
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2013-7-7 21:11:31 显示全部楼层
夏叫兽 发表于 2013-7-7 21:04
因为你工程里没加 CONFIG   += qaxcontainer这个,所以提示找不到!请仔细阅读我推荐的那个的链接,谢谢 ...

如果不是这个原因,就检查一下你的源码,从你的截图来看编译有个警告,会不会有影响?如果再不行,那我也没办法了,目前我只知道这么多了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了