我第一次尝试使用openpyxl。我有一个excel文件,有两列数据。列'A'具有ID号,而列'C'具有值。我只是试图将它们作为普通键/值对象提取出来。
这些是我想要实现的伪步骤
问题是我无法通过第2步创建工作表。行ws = wb.active()
似乎是获取默认WorkSheet的完全标准化方式。我看到它在很多例子中使用,并且在写这篇文章时,有关使用该行的SO有93个问题。但就我而言,它会引发错误:
File "C:\myworkspace\Myclass.py", line 18, in <module>
ws = wb.active()
TypeError: 'ReadOnlyWorksheet' object is not callable
我对Python很陌生,但之前我遇到过类似的错误。我知道如果我导入一个python模块名称而不是相关的类名,它会被抛出。到底发生了什么?为什么这种看似标准的检索工作表对象的方法,试图实现模块而不是类?我使用它错了吗?
file_url = 'C:/myfilepath.xlsx'
key_column_index = 1
value_column_index = 3
row_start = 2
request_map = {}
wb = load_workbook(filename = file_url, use_iterators = True)
ws = wb.active()
row_counter = row_start
while( ws.cell(row=row_counter, column=key_column_index).value ):
key = ws.cell(row=row_counter, column=key_column_index).value
value = ws.cell(row=row_counter, column=value_column_index).value
request_map[key] = value
row_counter += 1
pprint(dict([(n, tuple(l.split(';'))) for n, l in enumerate(requests.split('\n'))]))
为了让这真的很奇怪,我告诉你:
我想以最简单的方式重现我的错误,所以我找到了最简单的例子,并将其复制到我的工作区。除文件路径外,这与Ryu_Hayabusa对此问题的回答完全相同:parsing excel documents with python。现在得到这个:它有效,没有任何错误!
file_url = 'C:/myfilepath.xlsx'
wb = load_workbook(file_url)
ws = wb.active
for row in ws.iter_rows():
for cell in row:
print cell.value
当然,我怀疑行中的粗体文字
wb = load_workbook( filename = file_url ,use_iterators = True )
是问题,但没有。删除粗体标记的文本,使其与工作示例相同,仍然会产生错误。唯一的区别是现在它说的是Worksheet
而不是ReadOnlyWorksheet
这个广阔的世界正在发生什么?
答案 0 :(得分:9)