标签:style blog class code java c
excel是很常用的表格工具。不过,对程序员来说,这可不是件好事件。因为excel的数据既不像txt那样,随意一种语言、脚本,写个函数就能把数据读出来分析。也不像JSON这种开源的数据格式,有N多的开源库来读取。就算没有,知道数据格式,自己写个库也自己用不至于太难。
要想读取excel的数据,大多使用ODBC数据库驱动或者COM的方式。对于ODBC,不同的语言有不同的实现,如java的JDBC。而对于COM方式,几乎是在后台运行一个excel程序,像new Excel.Application(),相当于用自己的程序,去控制别人的程序。逻辑不是自己实现的,不能完全控制,总不大好。
一开始我想用Qt通过ODBC驱动来读取。代码如下:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC","excelexport"); if( !db.isValid()) return; //! type error QString dsn = "DRIVER={Microsoft Excel Driver (*.xls)};" "DSN=‘‘;FIRSTROWHASNAMES=0;READONLY=FALSE;CREATE_DB=\"item.xls\";DBQ=item.xls"; db.setDatabaseName(dsn); // open connection if( !db.open()) { qDebug()<<"error"; return; //! db error } qDebug()<<db.tables(QSql::AllTables); qDebug()<<db.tables(QSql::Tables); qDebug()<<db.tables(QSql::SystemTables); qDebug()<<db.tables(QSql::Views);
测试文件item.xls里有item、award两个sheet,但是输出却如下:
("award$",
"item$", "item$_")
()
()
()
我一直没搞明白item$_这个表是怎么出现的。是我的参数不对,还是逻辑错误,还是本身Qt对Excel的数据库驱动有问题???知道的还请多多指教。
Qt没做成功,后来找到了python。因为python有个开源(BSD License)的库xlrd(也许其他语言也有,只是我孤陋寡闻),专门读取excel数据。试了一下,感觉还很不错。
下载python:https://www.python.org/
下载xlrd:https://pypi.python.org/pypi/xlrd
xlrd帮助文档:http://www.python-excel.org/
基本代码一例(在帮助文档里该有的都有了,别告诉我说看不懂):
from xlrd import open_workbook,cellname book = open_workbook(‘odd.xls‘) sheet = book.sheet_by_index(0) print sheet.name print sheet.nrows print sheet.ncols for row_index in range(sheet.nrows): for col_index in range(sheet.ncols): print cellname(row_index,col_index),‘-‘, print sheet.cell(row_index,col_index).value
其实在http://www.python-excel.org/上可以看到,xlrd、xlwt都属于xlutils,xlrd是读excel文件,xlwt是写excel文件。xlutils则是两都的合并。
python读取excel数据,布布扣,bubuko.com
标签:style blog class code java c
原文地址:http://www.cnblogs.com/coding-my-life/p/3724475.html