QT使用QAxWidget在多线程中读取Excel数据

(1)本次工程创建于Qt Creator,因此需要配置对应的 .pro 文件,为其引入 Active Qt库。

QT += axcontainer

(2)为增加对QAxObject的支持,需要引入对应的头文件

#include "ActiveQt/qaxobject.h"
#include <objbase.h>

(3)为解决返回QAxObject为空的问题,需要在创建QAxObject()之前调用如下代码

CoInitializeEx(NULL, COINIT_MULTITHREADED);
m_pExcel = new(std::nothrow) QAxObject();

由于我们项目中使用的是多线程,而QAxObject默认是在单线程下使用的,如果不用上面代码提前声明多线程, 会导致获取的excel的QAxObject都是NULL。

(4)为保证读取文件时,定义文件目录的准确性,这里统一使用 ’\' 进行分隔,同时使用如下方式进行格式化

work_books->dynamicCall("Open (const QString&)", QDir::toNativeSeparators(m_strPath));

(5)文件的结束符应该在文件整个读取完毕后使用,如果不关闭会影响进程的运行速度

work_book->dynamicCall("Close(Boolean)", false);  //关闭文件
m_pExcel->dynamicCall("Quit(void)");  //退出

详细读取代码如下:

    int i=0;QString sheetName=""; QAxObject* m_pExcel;QString m_strPath;m_strPath = "Excil文件路径";//判断路径是否正确if(!QFile::exists(m_strPath)){return;}CoInitializeEx(NULL, COINIT_MULTITHREADED);m_pExcel = new(std::nothrow) QAxObject();//判断对象创建是否成功if (NULL == m_pExcel) {return;}//创建Excel服务m_pExcel->setControl("Excel.Application");//设置当前窗口的显示状态:true 表示操作文件时可见,false表示为不可见m_pExcel->dynamicCall("SetVisible(bool)", false); //设置是否显示报警m_pExcel->setProperty("DisplayAlerts", false);//创建工作表QAxObject *work_books = m_pExcel->querySubObject("WorkBooks");//在工作表中打开文件work_books->dynamicCall("Open (const QString&)", QDir::toNativeSeparators(m_strPath));//获取当前工作表QAxObject *work_book = m_pExcel->querySubObject("ActiveWorkBook");//获取当前工作表中所有的sheet表QAxObject *work_sheets = work_book->querySubObject("Sheets");     //获取sheet表的数量int sheet_count = work_sheets->property("Count").toInt();//在QT读取Excel时,sheet及sheet的行和列的起始地址都是从1开始的for (i = 1; i <= sheet_count; ++i)      {//获取sheet(i)QAxObject *work_sheet = work_book->querySubObject("Sheets(int)", i);//获取sheet中的所有数据QAxObject *used_range = work_sheet->querySubObject("UsedRange");//获取sheet中的所有行数据QAxObject *rows = used_range->querySubObject("Rows");//获取行数int row_count = rows->property("Count").toInt();//获取sheet表的表名sheetName = work_sheet->property("Name").toString();//这里第一行是表头,数据从第二行开始for(int i = 2; i<=row_count; ++i) {int row_1_data = work_sheet->querySubObject("Cells(int,int)", i, 1)->property("Value").toUInt();int row_2_data = work_sheet->querySubObject("Cells(int,int)", i, 2)->property("Value").toUInt();char * row_3_data = (char*)work_sheet->querySubObject("Cells(int,int)", i, 3)->property("Value").toString().toStdString().c_str();if (sheetName == QStringLiteral("三年一班"))//表名为"三年一班"的话执行一下操作{vYX.push_back(info);}else{continue;}}        }work_book->dynamicCall("Close(Boolean)", false);  //关闭文件m_pExcel->dynamicCall("Quit(void)");  //退出

QT使用QAxWidget读取Excel数据相关推荐

  1. Qt之如何读取Excel表格数据

    Qt之如何读取Excel表格数据 概述: 代码示例: .pro: 需要包含的头文件: readExcelData.h: readExcelData.cpp: over: 概述: 大家好我是背锅侠&qu ...

  2. android读取excel数据库,Android 读取Excel数据并保存在本地数据库

    在工作中遇到需要将Excel的数据读取出来并保存在本地数据库中的操作,数据如下: 图片.png 需要做以下准备: 读取Excel的jar包[文章末尾会分享该jar包] 保存数据的数据库框架,在这里我们 ...

  3. python读取excelsheet-一文看懂用Python读取Excel数据

    原标题:一文看懂用Python读取Excel数据 导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要 ...

  4. python读取excel某一列内容-Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  5. python如何读取excel数据-python怎么读取excel中的数值

    最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用过程中读取excel数据相关操作. 安装xlrd库(推荐学习:Python视频教程) 可以下载x ...

  6. poi excel mysql_java的poi技术读取Excel数据到MySQL

    这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 :java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 : ...

  7. python读取表格数据_Python读取Excel数据并根据列名取值

    一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...

  8. android 读取excel数据并保存为xml文件

    今天,简单讲讲android如何  读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...

  9. python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法

    Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...

最新文章

  1. K - 迷宫问题 POJ - 3984
  2. python sort函数时间复杂度_STL用法及其时间复杂度分析
  3. elasticsearch学习之路---Linux 下安装并启动elasticsearch
  4. 甲方都爱的C4D设计,有了这组灵感,0基础也能get​!
  5. ASA REST API安装步骤
  6. AndroidStudio中获得的VersionCode一直为1和VersionName一直为1.0
  7. 453.最小移动次数使数组元素相等
  8. mysql客户sqlyog_MySQL客户端工具 SQLyog
  9. python源代码(create,huafen,doc)
  10. Landsat数据之介绍
  11. 大多数人奋斗一辈子才能得到的东西,你见过吗?
  12. less 或 scss 覆盖UI组件样式并集选择器使用
  13. 最好用的六款虚拟机软件
  14. 机器学习(1)——安装与配置 Anconda 、tensorflow、keras、jupyter notebook
  15. 【题解】将军令 Luogu P3942 (未完成)
  16. 还在寻找一款DVD全能转换器吗?WinX DVD Ripper for Mac它不香吗?
  17. 利用facebook graph api发送图片
  18. 推进“数字外服”项目,提升公司管理半径
  19. (五)深入理解蓝牙BLE之“Beacon包格式详解”
  20. Ubuntu Server 20.04 LTS 安装配置 PostgreSQL

热门文章

  1. BUAA_2020级(信息大类)数据结构综合作业编程题_文本摘要生成_哈希表
  2. 学术论文常用网址,自己收藏和分享给大家
  3. 三、python数据序列1-列表
  4. Python实验,用pygame做飞机大战游戏设计
  5. 灵飞经3 印神无双 第十四章 印神古墓 3
  6. r语言软件GDINA_认知诊断分析系统(flexCDMs)设计及其实现
  7. Matlab下地形图绘图包m_map绘制晕渲(shaded relief)地形图
  8. 网络安全-文件上传漏洞的原理、攻击与防御
  9. python中re.search()函数的用法
  10. 关于t00ls的挂机脚本