我是第一次尝试openpyxl.我有一个excel文件,有两列数据.列’A’具有ID号,而列’C’具有值.我只是尝试提取它们,作为普通键/值对象.
这些是我想要实现的伪步骤
>按位置查找文件,并创建工作簿对象
>定义WorkSheet对象.就我而言,这是默认的第一页
>遍历行,只要列’A’中有键值即可
>将“A”和“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)
是问题,但没有.删除粗体标记的文本,使其与工作示例相同,仍然会产生错误.唯一的区别是现在它说工作表而不是ReadOnlyWorksheet在这个大广阔的世界里会发生什么?
解决方法:
在openpyxl中,库提供了wb.active作为属性,为您提供当前活动的工作表.因此,您不需要添加()来将其作为函数调用.
ws = wb.active
你的减少的例子正确地做了.