QT使用QAxWidget读取Excel数据
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数据相关推荐
- Qt之如何读取Excel表格数据
Qt之如何读取Excel表格数据 概述: 代码示例: .pro: 需要包含的头文件: readExcelData.h: readExcelData.cpp: over: 概述: 大家好我是背锅侠&qu ...
- android读取excel数据库,Android 读取Excel数据并保存在本地数据库
在工作中遇到需要将Excel的数据读取出来并保存在本地数据库中的操作,数据如下: 图片.png 需要做以下准备: 读取Excel的jar包[文章末尾会分享该jar包] 保存数据的数据库框架,在这里我们 ...
- python读取excelsheet-一文看懂用Python读取Excel数据
原标题:一文看懂用Python读取Excel数据 导读:现有的Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上). Python处理Excel文件主要 ...
- python读取excel某一列内容-Python读取Excel数据并根据列名取值
一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...
- python如何读取excel数据-python怎么读取excel中的数值
最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用过程中读取excel数据相关操作. 安装xlrd库(推荐学习:Python视频教程) 可以下载x ...
- poi excel mysql_java的poi技术读取Excel数据到MySQL
这篇blog是介绍java中的poi技术读取Excel数据,然后保存到MySQL数据中. 你也可以在 :java的poi技术读取和导入Excel了解到写入Excel的方法信息 使用JXL技术可以在 : ...
- python读取表格数据_Python读取Excel数据并根据列名取值
一直想将自己接触到的东西梳理一遍,可就是迈不出第一步,希望从这篇总结开始不要再做行动的矮人了. 最近测试过程中需要用到python读取excel用例数据,于是去了解和学习了下xlrd库,这里只记录使用 ...
- android 读取excel数据并保存为xml文件
今天,简单讲讲android如何 读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...
- python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法
Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...
最新文章
- K - 迷宫问题 POJ - 3984
- python sort函数时间复杂度_STL用法及其时间复杂度分析
- elasticsearch学习之路---Linux 下安装并启动elasticsearch
- 甲方都爱的C4D设计,有了这组灵感,0基础也能get​!
- ASA REST API安装步骤
- AndroidStudio中获得的VersionCode一直为1和VersionName一直为1.0
- 453.最小移动次数使数组元素相等
- mysql客户sqlyog_MySQL客户端工具 SQLyog
- python源代码(create,huafen,doc)
- Landsat数据之介绍
- 大多数人奋斗一辈子才能得到的东西,你见过吗?
- less 或 scss 覆盖UI组件样式并集选择器使用
- 最好用的六款虚拟机软件
- 机器学习(1)——安装与配置 Anconda 、tensorflow、keras、jupyter notebook
- 【题解】将军令 Luogu P3942 (未完成)
- 还在寻找一款DVD全能转换器吗?WinX DVD Ripper for Mac它不香吗?
- 利用facebook graph api发送图片
- 推进“数字外服”项目,提升公司管理半径
- (五)深入理解蓝牙BLE之“Beacon包格式详解”
- Ubuntu Server 20.04 LTS 安装配置 PostgreSQL
热门文章
- BUAA_2020级(信息大类)数据结构综合作业编程题_文本摘要生成_哈希表
- 学术论文常用网址,自己收藏和分享给大家
- 三、python数据序列1-列表
- Python实验,用pygame做飞机大战游戏设计
- 灵飞经3 印神无双 第十四章 印神古墓 3
- r语言软件GDINA_认知诊断分析系统(flexCDMs)设计及其实现
- Matlab下地形图绘图包m_map绘制晕渲(shaded relief)地形图
- 网络安全-文件上传漏洞的原理、攻击与防御
- python中re.search()函数的用法
- 关于t00ls的挂机脚本