注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

Qt中将QTableView中的数据导出为Excel文件【转】  

2011-07-30 21:34:23|  分类: QT编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能。之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件。在使用了QtSql模块后,我很容易的将这个类改写应用在Qt程序中。类的名字叫“ExportExcelObject”。使用起来很简单:


view plaincopy to clipboardprint?
// 1. declare an object    
  
// – fileName Excel 文件路径   
  
// – sheetName Excel 工作表(sheet)名称   
  
// – tableView 需要导出的QTableView指针   
  
ExportExcelObject obj(fileName, sheetName, tableView);  
  
   
  
         // 2. define fields (columns) to the Excel sheet file   
  
// – 第1个参数是QTableView的列   
  
// – 第2个参数是对应该列的Excel sheet中的列名   
  
// – 第3个参数是该列的类型,可以使用char(x) (x最大255),int,datetime, 等   
  
    obj.addField(1, tr("name"), "char(60)");  
  
    obj.addField(2, tr("ID"), "int");  
  
obj.addField(3, tr("time"), " datetime ");  
  
   
  
// 3. 该类有特定的SIGNAL用于连接一个progress控件,可以显示导出进度   
  
connect(&obj, SIGNAL(exportedRowCount(int)), progressBar, SLOT(setValue(int)));  
  
   
  
         // 4. do the work   
  
         int retVal = obj.export2Excel();  
  
if(retVal > 0)  
  
{//done   
  
}  
  
else  
  
{//something wrong   
  
}  
// 1. declare an object // – fileName Excel 文件路径 // – sheetName Excel 工作表(sheet)名称 // – tableView 需要导出的QTableView指针 ExportExcelObject obj(fileName, sheetName, tableView); // 2. define fields (columns) to the Excel sheet file // – 第1个参数是QTableView的列 // – 第2个参数是对应该列的Excel sheet中的列名 // – 第3个参数是该列的类型,可以使用char(x) (x最大255),int,datetime, 等 obj.addField(1, tr("name"), "char(60)"); obj.addField(2, tr("ID"), "int"); obj.addField(3, tr("time"), " datetime "); // 3. 该类有特定的SIGNAL用于连接一个progress控件,可以显示导出进度 connect(&obj, SIGNAL(exportedRowCount(int)), progressBar, SLOT(setValue(int))); // 4. do the work int retVal = obj.export2Excel(); if(retVal > 0) {//done } else {//something wrong }

         那么这个类是怎样实现的呢?

1.       将Excel文件当成是一个数据库

使用MS的ODBC或ADO都可以将Excel文件当做一个数据库,那么我们只需要使用下面这个DSN连接串去创建并连接至该Excel文件:


view plaincopy to clipboardprint?
QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN=''; FIRSTROWHASNAMES=1;;CREATE_DB=/"%1/";DBQ=%2").  
  
                  arg(excelFilePath).arg(excelFilePath);  
QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN=''; FIRSTROWHASNAMES=1;;CREATE_DB=/"%1/";DBQ=%2"). arg(excelFilePath).arg(excelFilePath);   

2.       将Excel的工作表(sheet)当成是一个数据库表

可以使用SQL语句“CREATE TABLE” 去创建一个工作表。

 

3.       向表中插入数据

使用SQL的“INSERT”语句插入数据。

 

4.       Unicode支持

是的,列名和数据都支持Unicode。

 

我写了个例子用于演示这个类(下载)。这个程序在WinXP/Vista/7都可正常运行。这个程序并不需要你的电脑上安装了Excel,因为{Microsoft Excel Driver (*.xls)}从Windows 2000开始就是系统自带支持的。

 

 

Sample

  评论这张
 
阅读(2941)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017