2015-03-23 4 views
2

Я написал сценарий, который читает файл .xlsx с помощью openpyxl на MacOS. Я сделал обновления, чтобы разрешить запуск моего сценария на MacOS или Linux. Openpyxl вызывает ошибку при вызове load_workbook.openpyxl error: получил неожиданный аргумент ключевого слова 'quotePrefix'

import platform 
system = platform.system() 

if system == "Darwin": 
    cpgatt = "/Users/tlombard/desktop/py-sandbox/PickleJar/CSG_CHG_Clarity_attributes1.xlsx" 
if system == 'Linux': 
    cpgatt = "/ws/tlombard-sjc/Picklejar/CSG_CHG_Clarity_attributes1.xlsx" 
cpgatt_wb = openpyxl.load_workbook(cpgatt) 

Ошибки я получаю:

"TypeError: __init__() got an unexpected keyword argument 'quotePrefix'" 
The full traceback:------- 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/auto/elb_hwtools/cae/lib/python/v2.7.8/openpyxl/reader/excel.py", line 149, in load_workbook 
    _load_workbook(wb, archive, filename, read_only, keep_vba) 
    File "/auto/elb_hwtools/cae/lib/python/v2.7.8/openpyxl/reader/excel.py", line 237, in _load_workbook 
    keep_vba=keep_vba) 
    File "/auto/elb_hwtools/cae/lib/python/v2.7.8/openpyxl/reader/worksheet.py", line 324, in read_worksheet 
    fast_parse(ws, xml_source, shared_strings, style_table, color_index) 
    File "/auto/elb_hwtools/cae/lib/python/v2.7.8/openpyxl/reader/worksheet.py", line 312, in fast_parse 
    parser.parse() 
    File "/auto/elb_hwtools/cae/lib/python/v2.7.8/openpyxl/reader/worksheet.py", line 93, in parse 
    dispatcher[tag_name](element) 
    File "/auto/elb_hwtools/cae/lib/python/v2.7.8/openpyxl/reader/worksheet.py", line 189, in parse_row_dimensions 
    self.parse_cell(cell) 
    File "/auto/elb_hwtools/cae/lib/python/v2.7.8/openpyxl/reader/worksheet.py", line 134, in parse_cell 
    cell = Cell(self.ws, column, row, **style) 
TypeError: __init__() got an unexpected keyword argument 'quotePrefix' 
>>> cpgatt 
'/ws/tlombard-sjc/Picklejar/CSG_CHG_Clarity_attributes1.xlsx' 
>>> 
+0

У меня такая же ошибка в одном из моих сценариев. Я думаю, что это происходит из форматирования чисел, которое openpyxl не может разобрать. – DrHaze

+0

Пожалуйста, отправьте отчет об ошибке с полной трассировкой и предпочтительно образцом. –

+0

Thank's Charlie- Здесь ссылка на сообщение об ошибке - https://bitbucket.org/openpyxl/openpyxl/issue/438/linux-version-of-openpyxl-does-not-open –

ответ

2

У меня была такая же проблема, вот мой полный след:

Traceback (most recent call last): 
    File "__init__.py", line 318, in readExcelFile 
    wb2 = load_workbook(unicode(self.ui_sourcePath.text()))#self.ui_sourcePath.text().replace("/", "\\")) 
    File "C:\Python27\lib\site-packages\openpyxl\reader\excel.py", line 149, in load_workbook 
    _load_workbook(wb, archive, filename, read_only, keep_vba) 
    File "C:\Python27\lib\site-packages\openpyxl\reader\excel.py", line 237, in _load_workbook 
    keep_vba=keep_vba) 
    File "C:\Python27\lib\site-packages\openpyxl\reader\worksheet.py", line 325, in read_worksheet 
    fast_parse(ws, xml_source, shared_strings, style_table, color_index) 
    File "C:\Python27\lib\site-packages\openpyxl\reader\worksheet.py", line 313, in fast_parse 
    parser.parse() 
    File "C:\Python27\lib\site-packages\openpyxl\reader\worksheet.py", line 93, in parse 
    dispatcher[tag_name](element) 
    File "C:\Python27\lib\site-packages\openpyxl\reader\worksheet.py", line 190, in parse_row_dimensions 
    self.parse_cell(cell) 
    File "C:\Python27\lib\site-packages\openpyxl\reader\worksheet.py", line 135, in parse_cell 
    cell = Cell(self.ws, column, row, **style) 
TypeError: __init__() got an unexpected keyword argument 'quotePrefix' 

Как вы можете видеть в трассировке, ошибка когда openpyxl пытается разобрать книгу. Я добавил следующую строку в C:\Python27\lib\site-packages\openpyxl\reader\worksheet.py @ 135

column, row = coordinate_from_string(coordinate) 
print column, row 
cell = Cell(self.ws, column, row, **style) 

Проблема возникла из одной ячейки в моей книге Excel, и только один. Мое временное решение этой проблемы заключается в удалении от quotePrefix ключа в style Dict:

style = {} 
    if style_id is not None: 
     style_id = int(style_id) 
     style = self.styles[style_id] 
     if "quotePrefix" in style.keys(): 
       del style["quotePrefix"] 

    column, row = coordinate_from_string(coordinate) 
    cell = Cell(self.ws, column, row, **style) 
    self.ws._add_cell(cell) 

я не мог управлять, чтобы найти, почему эта конкретная ячейка вызывают эти проблемы и как переопределить кавычки префикс.

+2

До 2.2 стили были смоделированы напрямую, но их неизменяемость делала их медленными. 2.2 отображает указатели на различные настройки стиля непосредственно на «настраиваемые» объекты (ячейки, строки, столбцы). Это быстрее и безопаснее от непреднамеренных последствий, но еще не учитывает все возможности. 'quotePrefix' и' pivotButton' - это неявные параметры форматирования без прямого аналога в графическом интерфейсе. Удаление их предотвратит исключение, но также удалит стилизацию. До тех пор, пока вам нужны только данные, тогда использование режима только для чтения, вероятно, является лучшим решением проблемы до исправления. –

+0

Спасибо за эту информацию. – DrHaze

Смежные вопросы