File with external links corrupts
Created originally on Bitbucket by artifex_knowledge (Gericke Potgieter)
I seemed to have chanced on a bug - if not please advise.
Environment: Python 3.5.2 Openpyxl version: 2.4.0
Replication Process:
Opening a file with one or more external link, then saving it.
Code used for replication:
#!python
def test_external_link_corruption():
file_path = 'has external links.xlsx'
tfile = load_workbook(file_path)
sh = tfile['Sheet1']
print('RANDOM BORDER 1')
print(sh['f6'].border)
print(sh['f6'].border.top)
print(sh['f6'].border.left)
print(sh['f6'].border.bottom.color)
print(sh['f6'].border.right.color)
print('RANDOM BORDER 2')
print(sh['f40'].border)
print(sh['f40'].border.top)
print(sh['f40'].border.left)
print(sh['f40'].border.bottom.color)
print(sh['f40'].border.right.color)
tfile.save(file_path)
Replicated Symptom:
On opening the file in Excel, it requires repair, removing the external formula
Original Process:
Opening an excel file, running many functions, saving it, then reopening it for further processing.
Original Symptom:
The program generates the following error:
#!python
Traceback (most recent call last):
File "/home/gericke/PycharmProjects/xxxx/ss_integrity/test_base.py", line 1229, in test_all
build_results(file_name, all_test_counts, test_results, get_stats, get_con, test_file_names)
File "/home/gericke/PycharmProjects/xxxx/ss_integrity/report_results.py", line 471, in build_results
results_overview(file_name, all_results, test_file_names[2])
File "/home/gericke/PycharmProjects/xxxx/ss_integrity/report_results.py", line 23, in results_overview
full_workbook = load_workbook(file_name, read_only=False)
File "/usr/local/lib/python3.5/dist-packages/openpyxl/reader/excel.py", line 161, in load_workbook
parser.parse()
File "/usr/local/lib/python3.5/dist-packages/openpyxl/packaging/workbook.py", line 56, in parse
read_external_link(self.archive, rel.Target)
File "/usr/local/lib/python3.5/dist-packages/openpyxl/workbook/external_link/external.py", line 189, in read_external_link
deps = get_dependents(archive, link_path)
File "/usr/local/lib/python3.5/dist-packages/openpyxl/packaging/relationship.py", line 128, in get_dependents
src = archive.read(filename)
File "/usr/lib/python3.5/zipfile.py", line 1232, in read
with self.open(name, "r", pwd) as fp:
File "/usr/lib/python3.5/zipfile.py", line 1255, in open
zinfo = self.getinfo(name)
File "/usr/lib/python3.5/zipfile.py", line 1199, in getinfo
'There is no item named %r in the archive' % name)
KeyError: "There is no item named 'xl/worksheets/_rels/sheet1.xml.rels' in the archive"
Please find attached a sample file used for replicating the error. The 'has external links.xlsx" file is opened, then saved, which results in a broken file which I attach as "has external links - broken.xlsx."
Attachments: has_external_links.xlsxhas_external_links_-_broken.xlsx