转自:http://blog.csdn.net/li494816491/article/details/50274305

1. QAxObject *_excelObject1 =newQAxObject("Excel.Application");

2. QAxObject *workbooks = _excelObject1->querySubObject("WorkBooks");

3. QAxObject *workbook = workbooks->querySubObject("Open(constQString&)",QDir::toNativeSeparators(QDir::currentPath() +"./1.xls"));

4. QAxObject *sheet=workbook->querySubObject("Sheets(int)",1);

5. QAxObject* cell = sheet->querySubObject("Cells(int,int)", 1, 4);

6. cell->dynamicCall("SetValue(const QString&)", "str");

7. book->dynamicCall("SaveAs(QString)",fileName.replace("/","\\"));

8. book->dynamicCall("Close(Boolean)", false);

9. _excelObject1->dynamicCall("Quit(void)");

10. delete cell;delete sheet; delete workbook;delete workbooks; delete _excelObject1;

但是这么搞效率太低了,写10000行30列数据就需要11分钟。

后来发现主要的时间都是在和excel的控件交互方面。于是在减少和excel空间的交互方面找解决办法。

查了VBA的手册,发现有range这个方法于是可以使用,另外在Qt中找到

SAFEARRAY(VARIANT) QList<QVariant> const QList<QVariant>& QList<QVariant>&

可以使用QList<QVaiant>代替VBA中的数组。于是上面的cell可以用range代替一行一行的写

1. QAxObject *range = worksheet->querySubObject("Range(QString)", "A1:AF1");

2. range->setProperty("Value", aline);//aline 是一个QList<QVaiant>变量

    效果很明显,一行行的写之后,只需要20s就能完成10000行30列的数据写入了。

    既然可以一行一行的写,那么也可以使用vba的二维数组写。下面的写法效率更高,速度更快。

1.QList<QVariant> a1,a2, a3;

2. QVariant b1(a1), b2(a2), b3(a3);

3. QList<QVariant> c;

4. QVariant d(c);

5.  QAxObject *range = sheet->querySubObject("Range(QString)", "A1:C3");


6. range->setProperty("Value", d);

[转]Qt 5.5 操作 Excel 的速度 效率问题的更多相关文章

  1. Qt QAxObject操作excel文件过程总结(转):

    正好同事问道Qt下操作excel. 转自:http://blog.csdn.net/a156392343/article/details/48092515 配制方面: 1.确保Excel软件在本地服务 ...

  2. Qt之操作Excel

    Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言,主要能用来扩展Windows的应用程式功能,特别是Microsoft Office软件. ...

  3. qt 操作excel表格

     自己编写的一个Qt C++类,用于操作excel表格,在Qt中操作excel需在.pro中增加CONFIG+=qaxcontainer配置. 1.打开Excel:objExcel = new QAx ...

  4. Qt 下快速读写Excel指南(尘中远)

    Qt Windows 下快速读写Excel指南 很多人搜如何读写excel都会看到用QAxObject来进行操作,很多人试了之后都会发现一个问题,就是慢,非常缓慢!因此很多人得出结论是QAxObjec ...

  5. C# 操作 Excel 常见问题收集和整理(定期更新,欢迎交流)

    经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个最基本的问题. 做开发这几年来,陆陆续续也接触过这样的需求,但因为 ...

  6. Python操作Excel——win32com模块和xlrd+xlwt+xlutils组合

    今天,接到一个任务,要生成大约两百个excel文件,从2006年到2013年,每个月两个文件,这些文件中除了几个关于日期的单元格不同外,其他数据都相同,所以就想到可以用python写一个小脚本,自动生 ...

  7. 转-C# 操作 Excel 常见问题收集和整理

    经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个最基本的问题. 做开发这几年来,陆陆续续也接触过这样的需求,但因为 ...

  8. 在 VS2008 下操作 Excel 的方法总结

      这些天做个软件,需要读取 Excel 并导入到数据库中,所以研究了一下在 VC 下操作 Excel 的方法,这里做个总结,以作备忘. 一.最常用的 OLE 自动化方式 这个方式应该说是功能最全的方 ...

  9. C# 操作 Excel 常见问题收集和整理

    C# 操作 Excel 常见问题收集和整理(定期更新,欢迎交流) 经常会有项目需要把表格导出为 Excel 文件,或者是导入一份 Excel 来操作,那么如何在 C# 中操作 Excel 文件成了一个 ...

随机推荐

  1. 【opencv】opencv在图片、视频嵌中英文字符的方法

    转自:http://www.cnblogs.com/hujingshuang/p/5119015.html 说明:本博文是根据前人已有的成果并结合自己的理解而成的.为了避免让读者感到繁琐,我将运用小学 ...

  2. Opencv+Zbar二维码识别(标准条形码/二维码识别)

    使用Opencv+Zbar组合可以很容易的识别图片中的二维码,特别是标准的二维码,这里标准指的是二维码成像清晰,图片中二维码的空间占比在40%~100%之间,这样标准的图片,Zbar识别起来很容易,不 ...

  3. 【hdu 2222】Keywords Search

    [题目链接] 点击打开链接 [算法] 此题是AC自动机模板题 AC自动机是很神奇的算法,简单点来说,就是在一棵字典树上进行KMP,它的应用范围很广,非常实用 这篇博客写得很好,推荐阅读 : http: ...

  4. flask中manage.py的用法

    flask中manage.py的用法#!/usr/bin/env pythonimport osfrom app import create_app, dbfrom app.models import ...

  5. uCareSystem:Ubuntu/Linux Mint的一体化系统更新和维护工具

    对于任何一款允许用户还原电脑到之前状态(包括文件系统,安装的应用,以及系统设置)的操作系统来说,系统还原功能都是必备功能,它可以恢复系统故障以及其他的问题. 有的时候安装一个程序或者驱动可能让你的系统 ...

  6. centos7更改远程端口

    centos7更改远程端口 一.创建个普通账户(useradd work),给普通账户创建密码(password work) 二.查看应有的软件是否安装 1.查看semanager是否安装执行下面命令 ...

  7. mfc设置半透明对话框

    BOOL CDialog7::OnInitDialog() { CDialog::OnInitDialog(); // TODO: 在此添加额外的初始化 ::SetWindowLong(GetSafe ...

  8. error the @annotation pointcut expression is only supported at Java 5

    eclipse搭建环境后报错 the pointcut is supported at Java 5 错误意思大致是:注释切入点表达式只支持在Java 5版本以上,我就纳闷了我安装的是jdk1.8啊, ...

  9. 从零开始构建一个Reactor模式的网络库(二)线程类Thread

    线程类Thread是对POSIX线程的封装类,因为要构建的是一个Linux环境下的多线程网络库,对线程的封装是很必要的. 首先是CurrentThread命名空间,主要是获取以及缓存线程id: #if ...

  10. k8s关键性概念

    1.service每个service对应一个cluster IP,cluster IP对应的服务网段最初是在配置kube-apiserver.kube-controller-manager和kube- ...