Qt操作Excel文件知识总结
2011-12-15 14:40
447 查看
Qt在windows平台下封装了Activex,可以同VAB中操作Excel一样读取xls文件,因此不支持linux平台。现在这个功能在Qt4.7中也不需要额外的商业许可了。这种方法比较通用,是常规方法,缺点是速度太慢了,如果数据量大,要想提高速度,可以考虑把excel文件另存为csv格式,用逗号分割个单元格的文本方式,直接操作文本文件,速度很快
2011年12月16日,在开源网站搜到一个跨平台的直接操作excel原生格式的C++类库xlslib,http://sourceforge.net/projects/xlslib/正在研究,估计这才是我想要的
如何在Qt中使用xlslib,http://developer.qt.nokia.com/forums/viewthread/747,关键是没有msvc2005/2008如何才能编译得到需要的dll或者.a库,这是问题
//////////////////////////////////////////////////////////////////////////
下面是QAxObject方法的代码备忘记录
在pro文件中增加
CONFIG+=axcontainer
LIBS+=-lqaxserver\
在cpp文件中
#include<QAxObject>
2011年12月16日,在开源网站搜到一个跨平台的直接操作excel原生格式的C++类库xlslib,
如何在Qt中使用xlslib,
//////////////////////////////////////////////////////////////////////////
下面是QAxObject方法的代码备忘记录
在pro文件中增加
CONFIG+=axcontainer
LIBS+=-lqaxserver\
-lqaxcontainer
在cpp文件中
#include<QAxObject>
QAxObject*excel=NULL;
QAxObject*workbooks=NULL;
QAxObject*workbook=NULL;
QAxObject*cell=NULL;
excel=newQAxObject("Excel.Application");
if(excel->isNull()){//网络中很多使用excel==NULL判断,是错误的
QMessageBox::critical(0,"错误信息","没有找到EXCEL应用程序");
return;
}
excel->dynamicCall("SetVisible(bool)",false);
workbooks=excel->querySubObject("WorkBooks");
workbook=workbooks->querySubObject("Open(QString,QVariant,QVariant)",fileName,3,true);//两个参数时,三个参数true和false都很正常,false锁定excel文件,其它程序只能只读方式打开,否则程序正在处理excel文件时,在外面打开excel,程序异常退出
if(!workbook){
QMessageBox::critical(0,"错误信息","excel文件不存在");
return;
}
QAxObject*worksheet=workbook->querySubObject("WorkSheets(int)",1);//打开第一个sheet
QAxObject*usedrange=worksheet->querySubObject("UsedRange");//获取该sheet的使用范围对象
QAxObject*rows=usedrange->querySubObject("Rows");
QAxObject*columns=usedrange->querySubObject("Columns");
intintRowStart=usedrange->property("Row").toInt();
intintColStart=usedrange->property("Column").toInt();
intintCols=columns->property("Count").toInt();
intintRows=rows->property("Count").toInt();
for(inti=intRowstsrt;i<intRowStart+intRows;i++){
for(j=intColStart;j<intColStrt+intCols;j++){
cell=worksheet->querySubObject("Cells(int,int)",i,j);//获取单元格
if(cell->property("Value").type()==QVariant::Double){
qDebug()<<QString::number(cell->property("Value").toDouble(),'f',0);
}elseif(cell->property("Value").type()==QVariant::QString){
qDebug()<<cell->property("Value").toString();
}
}
workbook->dynamicCall("Close(Boolean)",false);
excel->dynamicCall("Quit(void)");
deleteworkbook;
deleteworkbooks;
deleteexcel;
使用Activex读取excel速度不快,上千行的记录需要考虑用别的方法了,网上有直接读取excel格式文件的c++封装类,据说很快,没有下载测试
相关文章推荐
- Python培训知识总结系列- 第三章 Python3文件操作(一)
- python 文件操作知识总结: 获取当前路径
- 知识总结-Java 操作 Excel (读取Excel2003 2007,Poi实现)
- C#对word、excel、pdf等格式文件的操作总结
- C#对word、excel、pdf等格式文件的操作总结
- C#对word、excel、pdf等格式文件的操作总结
- C#对word、excel、pdf等格式文件的操作总结
- C#对word、excel、pdf等格式文件的操作总结 .
- C#对word、excel、pdf、csv等格式文件的操作总结
- Qt文件操作总结
- 黑马程序员--文件操作知识总结
- VB 操作Excel总结
- ASP操作Excel技术总结
- POI操作Excel常用方法总结
- Qt中文件操作遇到的。。。
- 利用 JAVA 操作 EXCEL 文件
- qt中文件读写操作
- Qt QAxObject操作excel文件过程总结
- Java操作文件二(excel)
- 黑马程序员----加载配置文件和通过内省方式操作javabean总结