Qt中将QTableView中的数据导出为Excel文件
2015-12-30 18:35
851 查看
如果你在做一个报表类的程序,可能将内容导出为Excel文件是一项必须的功能。之前使用MFC的时候我就写过一个类,用于将grid中的数据导出为Excel文件。在使用了QtSql模块后,我很容易的将这个类改写应用在Qt程序中。类的名字叫“ExportExcelObject”。使用起来很简单:
[cpp] view plaincopy
// 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
}
那么这个类是怎样实现的呢?
将Excel文件当成是一个数据库
使用MS的ODBC或ADO都可以将Excel文件当做一个数据库,那么我们只需要使用下面这个DSN连接串去创建并连接至该Excel文件:
[cpp] view plaincopy
QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN=''; FIRSTROWHASNAMES=1;;CREATE_DB=/"%1/";DBQ=%2").
arg(excelFilePath).arg(excelFilePath);
将Excel的工作表(sheet)当成是一个数据库表
可以使用SQL语句“CREATE TABLE” 去创建一个工作表。
向表中插入数据
使用SQL的“INSERT”语句插入数据。
Unicode支持
是的,列名和数据都支持Unicode。
我写了个例子用于演示这个类(下载)。这个程序在WinXP/Vista/7都可正常运行。这个程序并不需要你的电脑上安装了Excel,因为{Microsoft Excel Driver (*.xls)}从Windows 2000开始就是系统自带支持的。
http://blog.csdn.net/superjoel/article/details/5321404
[cpp] view plaincopy
// 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
}
那么这个类是怎样实现的呢?
将Excel文件当成是一个数据库
使用MS的ODBC或ADO都可以将Excel文件当做一个数据库,那么我们只需要使用下面这个DSN连接串去创建并连接至该Excel文件:
[cpp] view plaincopy
QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN=''; FIRSTROWHASNAMES=1;;CREATE_DB=/"%1/";DBQ=%2").
arg(excelFilePath).arg(excelFilePath);
将Excel的工作表(sheet)当成是一个数据库表
可以使用SQL语句“CREATE TABLE” 去创建一个工作表。
向表中插入数据
使用SQL的“INSERT”语句插入数据。
Unicode支持
是的,列名和数据都支持Unicode。
我写了个例子用于演示这个类(下载)。这个程序在WinXP/Vista/7都可正常运行。这个程序并不需要你的电脑上安装了Excel,因为{Microsoft Excel Driver (*.xls)}从Windows 2000开始就是系统自带支持的。
http://blog.csdn.net/superjoel/article/details/5321404
相关文章推荐
- QTP入门——玩玩小飞机
- QTableView另类打印解决方案(复用render函数去解决print问题)
- Qt的Model/View Framework解析(数据是从真正的“肉(raw)”里取得,Model提供肉,所以读写文件、操作数据库、网络通讯等一系列与数据打交道的工作就在model中做了)
- QT平台连接MySQL数据库
- qt里产生随机数
- Qt学习(14)
- QT 多种状态的背景图片, 放在同一张图上, border-image 进行分割,拉伸
- Qt文件操作:遍历文件夹中 指定格式的文件,并添加文件名到comboBox上
- qt 下的一个小日志系统
- Qt之开机自启动及拥有管理员权限
- 使用Qt显示GIF格式动画
- 时间戳转换为时间格式
- 对于Qt界面类结构与数据复制存放问题总结
- Qt5.4静态编译方法
- Qt学习—qt上下文菜单显示
- Qt使用教程之创建移动应用程序(一)
- qt button的位置和大小
- qt中使用winhttp发送服务端请求
- 有关无法定位程序输入点***于动态链接库XXXXXXXX上的解决办法
- Qt之QComboBox(委托)