我有个很奇怪的问题。我正在尝试从excel文件中读取一些数据,但是属性nrows有一个错误的值。虽然我的文件有很多行,但它只返回2。
我的工作是日食。我不知道到底是什么问题,一切看起来都很好。
当我尝试通过索引访问其他行时,但是得到了索引错误。
我很感谢你的帮助。
如果有帮助,那就是我的代码:
def get_data_form_excel(address):
wb = xlrd.open_workbook(address)
profile_data_list = []
for s in wb.sheets():
for row in range(s.nrows):
if row > 0:
values = []
for column in range(s.ncols):
values.append(str(s.cell(row, column).value))
profile_data_list.append(values)
print str(profile_data_list)
return profile_data_list发布于 2013-10-01 13:29:59
在尝试了一些其他文件之后,我确信这是关于该文件的,而且我认为它与Microsoft 2003和2007的差异有关。
发布于 2013-10-01 12:17:57
要确保您的文件没有损坏,请尝试使用另一个文件;我怀疑xlrd是否有问题。
另外,我还清理了您的代码,使其看起来更好看一些。例如,if row > 0检查是不必要的,因为您可以首先在range(1, sheet.nrows)上迭代。
def get_data_form_excel(address):
# this returns a generator not a list; you can iterate over it as normal,
# but if you need a list, convert the return value to one using list()
for sheet in xlrd.open_workbook(address).sheets():
for row in range(1, sheet.nrows):
yield [str(sheet.cell(row, col).value) for col in range(sheet.ncols)]或
def get_data_form_excel(address):
# you can make this function also use a (lazily evaluated) generator instead
# of a list by changing the brackets to normal parentheses.
return [
[str(sheet.cell(row, col).value) for col in range(sheet.ncols)]
for sheet in xlrd.open_workbook(address).sheets()
for row in range(1, sheet.nrows)
]发布于 2015-01-17 05:43:54
我最近也遇到了这个问题。我试图读取一个excel文件,xlrd.nrows给出的行号比实际的要小。作为Zeinab Abbasi saied,我尝试了其他文件,但它运行良好。
最后,我发现了不同之处:在失败的文件中嵌入了一个基于VB脚本的按钮,用于下载记录并将记录追加到当前的工作表中。
然后,我尝试将文件转换为.xlsx格式,但它要求我保存为另一种已启用宏的格式,例如.xlsm。这一次xlrd.nrows给出了正确的值。
https://stackoverflow.com/questions/19115521
复制相似问题