Missing default for refersTo (=None): workbook.names.external.External(name, refersTo, sheetId=None)
Created originally on Bitbucket by Dekker (Bitbucket user)
Setting:
- Ubuntu 14.0.4
- Python 2.7.6
- openpyxl 2.1.4
In our code we load a workbook (attached: Titelanalyse_USA3.xlsm):
#!python
wb = load_workbook(filename=file_path, data_only=True, guess_types=True)
And while reading the file an exception is thrown on line 85:
/usr/local/lib/python2.7/dist-packages/openpyxl/workbook/names/external.py in parse_ranges
#!python
def parse_ranges(xml):
tree = fromstring(xml)
book = tree.find('{%s}externalBook' % SHEET_MAIN_NS)
names = book.find('{%s}definedNames' % SHEET_MAIN_NS)
for n in safe_iterator(names, '{%s}definedName' % SHEET_MAIN_NS):
yield ExternalRange(**n.attrib) # <------ Throws: __init__() takes at least 3 arguments (2 given) --> n.attrib = {'name': 'FT'}
The problem arises with a call to:
class openpyxl.workbook.names.external.External(name, refersTo, sheetId=None)
A look at the xml of the function parse_ranges(xml):
--- xml ---
#!xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<externalLink xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14" xmlns:x14="http://schemas.microsoft.com/office/spreadsheetml/2009/9/main">
<externalBook xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" r:id="rId1">
<sheetNames>
<sheetName val="sample"/>
</sheetNames>
<definedNames><definedName name="FT"/></definedNames>
<sheetDataSet><sheetData sheetId="0"/></sheetDataSet>
</externalBook>
</externalLink>
So, the refersTo-part is not in the dictionary
#!python
n.attrib = {'name': 'FT'}
This load_workbook function loaded without problems with openpyxl 2.0.5/1.8.4
Cheers, Marco
Attachments: Titelanalyse_USA3.xlsm