python读取excel数据

  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则是两都的合并。

原文地址:https://www.cnblogs.com/coding-my-life/p/3724475.html