Qt5操作Excel操作的一些心得
【背景】:
[01:感叹]
我真怕使用MFC或者Qt操作作Excel! 我真的太怕使用MFC或者Qt操作作Excel! 我真的太太怕使用MFC或者Qt操作作Excel! 现在还心有余悸!怕呀,怕呀,怕呀!
[02:怕的场景]
特别是不什么操作Excel,平时偶尔操作时也看一下网上的,看懂算法与操作后,cp后略修改,然后了事,了...事。从来没觉得使用Q T竟然让我觉得是可怕的事过,相反都不把它放在心上过,可是,需求人员提出要给写将某某一堆结果,什么数据呀,什么二进制图片,什么本地图片呀,都 弄到Excel中,好吧,没什么了不起的要求,很和蔼的请求,咱能拒绝?这么和蔼的需求都拒绝,你还敢出来混,公司HR早找你去聊天了,算了,扯多了!之后,该总之,嗯!总之,不能,也无法拒绝!好了,下面是问题的现象,真是让人后怕的现象,看了,现在还真里后怕,因为它们让我卡了一周呀,我去TMD一周呀(非精口话不可了),一直卡着,一面做别的事,一面每天抽出一两个小时来调试,想想,反正像恶梦似的。可能太怕了,话都乱糟糟说了一堆,抱歉,见谅则个!(卡一周的原因:自己掉以轻心了,其次,对Excel了解不多,然后就是网上的资料太少,或者太浅,当然,我也不能说得多深,才用那么一会,能有多深呀)
[03:问题现象]
[03-1:问题现象一] Cells 的错误
(1)ERROR:
QAxBase: Error calling IDispatch member Cells: Exception thrown by server
Code : -2146827284
Source :
Description:
Help :
Connect to the exception(int,QString,QString,QString) signal to catch this exception
(2) 源码接口:(在类中很友好的加工,也真没有问题)
bool FaceAlgorithmCompTool::setCellData(QAxObject* pSheet, int row, int column, QString value)
{
try{ if(m_pExcel && pSheet) //QAxObject *m_pExcel; //本例中,excel设定为Excel文件的操作对象
{
//m_pExcel在类的构造函数已经初始化了(new),并配置好了。这个如果看的朋友要你有一定的基础,反正一点不了解看不懂的
QAxObject* pCell = pSheet->querySubObject("Cells(int,int)",row,column);
if(pCell)
{
pCell->setProperty("Value2", value);
}else{
qDebug()<<"setCellData:"<<"pCell指针异常";
return false;
}
//qDebug()<< getCurDate() <<" - 写入单元格的信息:"<<pCell->property("Value").toString();
}else{
qDebug()<<"m_pExcel && pSheet:"<<"指针异常";
return false;
}
}catch(...){
ui->txtEtLog->append(getCurDate()+": 数据写入Excel单元格失败!");
return false;
}
return true;
}
(3) 问题分析:
1)上面代码真没有任务问题,由于报了”Error calling IDispatch member Cells: Exception thrown by server“我还在try中多添加了检测,其实完全不用,但你用,也没事,更全面更精准的定位。这个不多说了。
2) 上面的问题在于,我传入的row = 0;我太了解excel,一般程序员数组或者什么的,都喜欢从0开始,而且pSheet->querySubObject("Cells(int,int)",row,column)中,我给row传0,是int,没问题呀。还有,就是如果你的代码很大,
你在类初始化就是定义了m_iRow,喜欢将其初始化为0,然后在写更多行时,m_iRow++;的往下用。汗,哪想到,
excel最小的的row=1,最小的纵列column = 1; 当上面报错这个时,我一开始觉得是不是我Excel不注册好,反正网上一堆人,说没注册好序列好,但我们公司都买好了。好吧,但我还是怀疑,汗,我什么了?也许我反正检测代码,发现上面的自己的源码接口,确实没有任务问题。重装呀,反正各种注册(公司都买相关的正版了,并注册好了,我还个种瞎搞,汗),不过,有对很准确的东西敢怀疑的精神还是不错的,就是太TDM浪费时间了,哈哈!
3)处理方法:
分析已经说明了,处理方法,就是在类构造函数中(或者在你最初初始化)excel的行(row)及列(column)的地方,将row与column重新初始化,按你的情况初始化,反正row最小不能小于1,column最小不能小于1。如果你的row=1有标题,那么row初始化则是2,列也这样的道理。
[03-2:问题现象二] AddPicture 的错误
1)ERROR
QAxBase: Error calling IDispatch member AddPicture: Exception thrown by server
Code : -2146827284
Source :
Description: ????????
Help :
Connect to the exception(int,QString,QString,QString) signal to catch this exception
2)源码
不在多说,给出关键的部分:
"AddPicture(QString&, bool, bool, double, double, double, double)"
3)分析上面的源码:
"AddPicture(QString&, bool, bool, double, double, double, double)"中,QString&是图片的路径+图片名如:D:/PIC/1.jpg
当你通过,UI上的PushButton Open图片路径+图片名时(假如为:qsPathPicName="D:/PIC/1.jpg",当然不是直接这样给的,通过:QFileDialog::getOpenFileName或者类似的拿到),然后将AddPicture(qsPathPicName,...)。好吧,恭喜你,肯定分出现上面的的Error现象的。
4)解决的办法
上面的AddPicture(qsPathPicName,...)中的qsPathPicName一定要使用类似这样的D:\\PIC\\1.jpg才不会出问题。
[03-3:问题现象三] Excel其他Error
从上面的问题中抽象的去分析类似的问题,再遇到其他 问题的做法:
1)了解excel基本信息,比如写时,列、行的最小不能小于1,等等类似的关于excel基础信息;
2)对于QT/MFC/Python/java等,操作excel的接口时,每一个参数都仔细的引入,因为在你习惯中某个参数这样用没问题,但是在但却报错,那时你一般不会去检测你习惯性让为是这样的用的参数。所以,清楚每个参数,并严格按接口的规定使用,而不是你习惯性为主导下使用这些接口。这也是程序员的基本素质,严谨性,代码一致性。
3)怕呀!怕呀!怕呀!好吧,怕那就多对面它呗,怕有什么了不起的,咱们还在,就奋斗着!
4)没得说了,那就再见吧!有用的话别谢我,没有用的话捶我吧!
Qt5操作Excel操作的一些心得相关推荐
- 中考计算机考试exce,中考信息技术EXCEL操作.doc
中考信息技术EXCEL操作 EXCEL操作 合并单元格 第一种办法: 选中需要合并的几个单元格 选择工具栏中的图标: 第二种办法: 选中需要合并的几个单元格 选择:格式 单元格 跳出如图所示 设置对齐 ...
- pandas 玩转 Excel 操作总结
Python 操作Excel操作总结,包括Series和Data Frame的互转.使用pandas读取Excel表格.python读取多个数据表.python合并多个工作表以及写入Excel文件 p ...
- python与excel做数据可视化-Python的Excel操作及数据可视化
Excel表操作 python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库. 安装xlrd pip install xlrd 简单的表格读取 ...
- java excel生成_java操作excel表,包括创建、读取、以及修改【via 度娘】
作者的网站上对它的特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体.数字.日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说 ...
- Qt Xlsx使用教程、Qt操作Excel、Qt生成Excel图表、跨平台不依赖Office
文章目录 1.Qt Xlsx库简介 2. 用法①:使用Xlsx作为Qt5的附加模块 2.1 构建模块 2.2 下载QtXlsx源代码 2.3 为编译器安装Xlsx模块 2.3.1 打开 MinGW 7 ...
- JXL(JXLS)的使用:java中操作Excel的解决方案之一。
摘要: 本文讲述的是如何使用开源项目JXSL来对Excel及其内部的数据进行操作,本人整理汇总自网络. JXLS项目主页: http://sourceforge.net/projects/jxls/ ...
- java导入导出excel操作(jxl)
java导入导出excel操作(jxl) Java解释Excel数据(jxl.jar包的使用) 关键字: java excel jxl.jar jxl.jar 包 下载地址: http://www.a ...
- python编程和excel_python编程之赋值和拷贝的区别概述及操作excel数据库(图)
python编程之赋值和拷贝的区别概述及操作excel数据库(图) 一.赋值 在Python中,对象的赋值就是简单的对象引用,这点和C++不同,如下所示: a = [1,2,"hello&q ...
- python excel操作单元格_python 操作excel表格的方法
说明:由于公司oa暂缺,人事妹子在做考勤的时候,需要通过几个excel表格去交叉比对员工是否有旷工或迟到,工作量大而且容易出错. 这时候it屌丝的机会来啦,花了一天时间给妹子撸了一个自动化脚本. 1. ...
最新文章
- Vue学习笔记第一天--es6
- hdu 1754 I Hate It(线段树之 单点更新+区间最值)
- PHP反序列化漏洞总结
- Hark的数据结构与算法练习之简单选择排序
- python多个函数_什么是在Python中使用多个构造函数的干净的、pythonic的方法?
- [css] css3的:nth-child和:nth-of-type的区别是什么?
- c语言链表贪吃蛇教程,编《贪吃蛇》最简单的算法,链表法
- Django的模型类Meta
- mysql start
- 深交所与6家股交中心深化区块链合作
- 在ECSHOP后台左侧导航中增加新菜单
- oracle大数据量迁移,分批量导入样例(fetch...bulk collect)以及forall结合使用
- Unicode 子集 数量统计
- 使用 Python 进行数据清洗的完整指南
- 树状图 - Dendrogram
- 里氏转换,arraylist,path,file
- Oracle实现US7ASCII到ZHS16GBK数据迁移正常显示中文
- 智慧数字经营有什么作用
- 《Java核心技术》学习笔记——第8章 泛型程序设计
- 思考题:一条信息可通过如图所示的网络线由上(A点)往下向各站点传送,例如信息到达b2点可由经a1的站点送达,也可以由经a2的站点送达,共有两条途径传送,那么信息由A点到达d3的不同途径共有多少条
热门文章
- 浅谈yolov4中的一部分数据增强
- HTML5与CSS3学习笔记【第八章 操作样式表】
- 感谢中本聪!也感谢扎克伯格!
- 打印论文是单面还是双面?
- 利用计算机技术全面规划供应,英语翻译《物流术语》国家标准对供应链管理的定义:利用计算机网络技术全面规划供应链中的商流、物流、信息流、资金流等,并进行...
- 清华大学2020年“姚班”“智班”报考指南及选拔方案发布!
- 【信息安全服务】使用Hashcat工具对shadow文件进行弱口令检查
- python调用 微信,向好友发送微博热搜榜
- CodeForces1144 C - Two Shuffled Sequences
- 【BZOJ4316】小C的独立集