У меня есть файл .xlsx, который содержит 2 листа. Первый содержит обычные данные (ничего особенного), а второй содержит сводные таблицы. Мне нужны только данные из первого листа, и я хочу игнорировать второй, но в сводных таблицах возникает ошибка: TypeError: expected <type 'basestring'>
при вызове openpyxl.load_workbook
.
Ошибка возникает в: openpyxl/reader/excel.py
, в строке: pivot_caches = parser.pivot_caches
.
Я пробовал с openpyxl
версиями 2.6.4
и 2.5.1
. Я использую Python 2.7.
После удаления 2-го рабочего листа ошибка исчезает, и данные с 1-го рабочего листа читаются правильно. Однако эти файлы загружаются пользователями, и, хотя мне не нужны сводные таблицы, я бы не стал заставлять пользователей удалять ненужные рабочие таблицы, если это возможно.
Пример кода:
from io import BytesIO
import openpyxl
pivot = '~/Downloads/file_with_pivot_tables.xlsx'
with open(pivot) as fin:
content = BytesIO(fin.read())
wb = openpyxl.load_workbook(content) # this line fails
ws = wb.get_sheet_by_name('Sheet1')
Полная трассировка ошибок:
File "/Users/gi/lib/openpyxl/reader/excel.py", line 224, in load_workbook
pivot_caches = parser.pivot_caches
File "/Users/gi/lib/openpyxl/packaging/workbook.py", line 125, in pivot_caches
cache = get_rel(self.archive, self.rels, id=c.id, cls=CacheDefinition)
File "/Users/gi/lib/openpyxl/packaging/relationship.py", line 162, in get_rel
obj.deps = get_dependents(archive, rels_path)
File "/Users/gi/lib/openpyxl/packaging/relationship.py", line 130, in get_dependents
rels = RelationshipList.from_tree(node)
File "/Users/gi/lib/openpyxl/descriptors/serialisable.py", line 84, in from_tree
obj = desc.expected_type.from_tree(el)
File "/Users/gi/lib/openpyxl/descriptors/serialisable.py", line 100, in from_tree
return cls(**attrib)
File "/Users/gi/lib/openpyxl/packaging/relationship.py", line 50, in __init__
self.Target = Target
File "/Users/gi/lib/openpyxl/descriptors/base.py", line 44, in __set__
raise TypeError('expected ' + str(self.expected_type))
TypeError: expected <type 'basestring'>