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

时间:2022-06-04 22:15:29

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

  1. // 1. declare an object
  2. // – fileName Excel 文件路径
  3. // – sheetName Excel 工作表(sheet)名称
  4. // – tableView 需要导出的QTableView指针
  5. ExportExcelObject obj(fileName, sheetName, tableView);
  6. // 2. define fields (columns) to the Excel sheet file
  7. // – 第1个参数是QTableView的列
  8. // – 第2个参数是对应该列的Excel sheet中的列名
  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. do the work
  16. int retVal = obj.export2Excel();
  17. if(retVal > 0)
  18. {//done
  19. }
  20. else
  21. {//something wrong
  22. }

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

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

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

  1. QString dsn = QString("DRIVER={Microsoft Excel Driver (*.xls)};DSN=''; FIRSTROWHASNAMES=1;;CREATE_DB=/"%1/";DBQ=%2").
  2. arg(excelFilePath).arg(excelFilePath);
  1. 将Excel的工作表(sheet)当成是一个数据库表

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

  1. 向表中插入数据

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

  1. Unicode支持

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

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

http://blog.csdn.net/superjoel/article/details/5321404