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

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

view plain copy to clipboard print ?
  1. //1.declareanobject
  2. //–fileNameExcel文件路径
  3. //–sheetNameExcel工作表(sheet)名称
  4. //–tableView需要导出的QTableView指针
  5. ExportExcelObjectobj(fileName,sheetName,tableView);
  6. //2.definefields(columns)totheExcelsheetfile
  7. //–第1个参数是QTableView的列
  8. //–第2个参数是对应该列的Excelsheet中的列名
  9. //–第3个参数是该列的类型,可以使用char(x)(x最大255),int,datetime,等
  10. obj.addField(1,tr("name" ), "char(60)" );
  11. obj.addField(2,tr("ID" ), "int" );
  12. obj.addField(3,tr("time" ), "datetime" );
  13. //3.该类有特定的SIGNAL用于连接一个progress控件,可以显示导出进度
  14. connect(&obj,SIGNAL(exportedRowCount(int )),progressBar,SLOT(setValue( int )));
  15. //4.dothework
  16. int retVal=obj.export2Excel();
  17. if (retVal>0)
  18. {//done
  19. }
  20. else
  21. {//somethingwrong
  22. }
// 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 plain copy to clipboard print ?
  1. QStringdsn=QString( "DRIVER={MicrosoftExcelDriver(*.xls)};DSN='';FIRSTROWHASNAMES=1;;CREATE_DB=\"%1\";DBQ=%2" ).
  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 开始就是系统自带支持的。

你可能感兴趣的:(Qt中将QTableView中的数据导出为Excel文件)