Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3439862
  • 博文数量: 864
  • 博客积分: 14125
  • 博客等级: 上将
  • 技术积分: 10634
  • 用 户 组: 普通用户
  • 注册时间: 2007-07-27 16:53
个人简介

https://github.com/zytc2009/BigTeam_learning

文章分类

全部博文(864)

文章存档

2023年(1)

2021年(1)

2019年(3)

2018年(1)

2017年(10)

2015年(3)

2014年(8)

2013年(3)

2012年(69)

2011年(103)

2010年(357)

2009年(283)

2008年(22)

分类: C/C++

2010-10-11 15:20:42

如果你在做一个报表类的程序,可能将内容导出为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开始就是系统自带支持的。
 
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/superjoel/archive/2010/02/24/5321404.aspx
阅读(1739) | 评论(0) | 转发(1) |
0

上一篇:面试题

下一篇:tomcat自启动脚本

给主人留下些什么吧!~~