Qt项目缺少lib问题以及利用Qt读写Excel

Qt配置环境

win7旗舰版64位
VS2013旗舰版
Qt5.9.0 MSVC2013-64位

遇到的问题

运行Qt空项目,显示无法读取shell32.lib

初步方法(治标不治本)

首先用Everything搜索电脑中是否有所缺少的lib,搜索显示在C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64目录下,可以将提示所缺少的lib复制到 D:\qt5.9.0\5.9\msvc2013_64\lib目录下。
这里值得记住的是,在搜索浏览了几十个网页甚至外网之后,仍然没有找到一个好的解决方法,可以扩大搜索条件,不要加上lib的名字,这里用百度搜索“qt msvc2013 无法打开lib”,搜索到网页解决Gdi32.lib无法打开的问题,这里虽然跟我出问题的lib不一样,但是起码能解决我的问题,让我能在凌晨3点终于能睡觉去了。

最终手段(根治)

第二天,调试带#include <QAxObject>的程序时,报了更多的缺少lib的问题,这时候如果把这些lib都复制过去也太乱了。
在又花了两个小时之后,瞎翻Qt,注意到,点击Qt左侧“项目”栏,在右下方的“构建环境”中,有一个变量"LIB",如图所示:
在这里插入图片描述

在这里将C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib\x64目录添加进去即可。

但是在这里,我始终没有搞明白的问题是,为什么我在pro文件里面配置的lib路径就像失效了一样,被Qt无视了,我在外网上看到有个人也是一样的问题

Qt读写Excel

    QAxObject *excel = new QAxObject();//建立excel操作对象
    excel->setControl("Excel.Application");//连接Excel控件
    excel->setProperty("Visible", true);//显示窗体看效果

    QAxObject *workbooks = excel->querySubObject("WorkBooks");
    QString templatePath = "E:/qt_program/excel_to_excel/111.xlsx";
    templatePath = QDir::toNativeSeparators(templatePath);   //转换一下路径,让windows能够识别
    QAxObject* workbook = workbooks->querySubObject("Open(const QString&)",templatePath); //打开
    excel->setProperty("Caption", "Qt Excel");      //标题为Qt Excel
    QAxObject *work_book = excel->querySubObject("ActiveWorkBook");
    QAxObject *worksheet = work_book->querySubObject("Sheets(int)",1);     //获取表单1

    QAxObject *range1 = worksheet->querySubObject("Range(QString)", "B1:B1");
    QString strRow6Col6 = "";
    strRow6Col6 = range1->property("Value").toString();
    qDebug() << "第6行,第6列的数据为:" + strRow6Col6;

    QAxObject *range2 = worksheet->querySubObject("Range(QString)", "F6:F6");
    //写入数据, 第6行,第6列
    range2->setProperty("Value", "123123");
    QString newStr = "";
    newStr = range2->property("Value").toString();
    qDebug() << "写入数据后,第6行,第6列的数据为:" + newStr;

    //!!!!!!!close,不然系统进程里会出现n个EXCEL.EXE进程
    workbook->dynamicCall("Save()");
    workbook->dynamicCall("Close()");
    excel->dynamicCall("Quit()");

    delete workbook;
    delete excel;

主要就是用Qt里面的QAxObject类,要#include <QAxObject>,并且在pro文件中要 QT += axcontainer

也是看了几十个博客至少,反正没有直接套用一个人的就能实现的,还是杂七杂八的堆砌起来,反正初步效果是能读写了,没啥意思,不打算继续做了

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值