在openpyxl中尝试保存时出现Key Error - 导致Excel文件损坏

0 投票
1 回答
1079 浏览
提问于 2025-04-18 07:00

我正在尝试用openpyxl来自动生成一个报告,现在还在初期阶段。我刚刚设置了第一部分,主要是把一个工作簿中的一部分单元格复制粘贴到另一个工作簿里。但是,当我想保存我粘贴内容的那个工作簿时,出现了一个键错误(key error)。而且这还把我的模板文件搞坏了,导致它无法打开。

我找到一个人也遇到了同样的问题,不过他的情况没有解决。有人建议他使用1.8.5版本,但我只找到了1.8.2版本。

ERROR: Failure: KeyError (-8937945243006069197)
    ----------------------------------------------------------------------
    Traceback (most recent call last):
      File "//anaconda/lib/python2.7/site-packages/nose/loader.py", line 413, in loadTestsFromName
        addr.filename, addr.module)
      File "//anaconda/lib/python2.7/site-packages/nose/importer.py", line 47, in importFromPath
        return self.importFromDir(dir_path, fqname)
      File "//anaconda/lib/python2.7/site-packages/nose/importer.py", line 94, in importFromDir
        mod = load_module(part_fqname, fh, filename, desc)
      File "/Users/joegavin/Dropbox/Python/projects/project pymur/tests/sandbox_tests.py", line 53, in <module>
        wb0.save('template.xlsx')
      File "//anaconda/lib/python2.7/site-packages/openpyxl/workbook.py", line 265, in save
        save_workbook(self, filename)
      File "//anaconda/lib/python2.7/site-packages/openpyxl/writer/excel.py", line 187, in save_workbook
        writer.save(filename)
      File "//anaconda/lib/python2.7/site-packages/openpyxl/writer/excel.py", line 170, in save
        self.write_data(archive)
      File "//anaconda/lib/python2.7/site-packages/openpyxl/writer/excel.py", line 98, in write_data
        self._write_worksheets(archive, shared_string_table, self.style_writer)
      File "//anaconda/lib/python2.7/site-packages/openpyxl/writer/excel.py", line 128, in _write_worksheets
        style_writer.get_style_by_hash()))
      File "//anaconda/lib/python2.7/site-packages/openpyxl/writer/worksheet.py", line 98, in write_worksheet
        write_worksheet_cols(doc, worksheet, style_table)
      File "//anaconda/lib/python2.7/site-packages/openpyxl/writer/worksheet.py", line 209, in write_worksheet_cols
        col_def['style'] = str(style_table[hash(columndimension.style_index)])
    KeyError: -8937945243006069197

这是我到目前为止写的所有代码。

from openpyxl import load_workbook
from openpyxl import workbook

########################### CLASSES ####################################

class Institution(object):
    def __init__(self, name, usage_hours,percentage_share,
                 target_percentage, number_of_projects):
        self.name = name
        self.usage_hours = usage_hours
        self.percentage_share = percentage_share
        self.target_percentage = target_percentage
        self.number_of_projects = number_of_projects


class Project(object):
    def __init__(self, project_name, project_code, percentage_share,
                 percentage_share_machine):
        self.project_name = project_name
        self.percentage_share = percentage_share
        self.percentage_share_machine = percentage_share_machine



############################ Setup ########################################



# Loading the workbook to read the figures off
wb0 = load_workbook('figures.xlsx')
wb1 = load_workbook('template.xlsx')

# Navigating to the worksheet where we harvest the data
ws0 = wb0.worksheets[0]
# Navigating to the worksheet we will copy data to
ws1 = wb1.worksheets[0]



project_codes0 = ws0["B1":"B100"]

project_codes1 = ws1['B1':'B100']

#cells1 = cells0

#for i in range(0, len(cells0[0])):
    #for cell in cells0:
        #print cell[i].value

wb0.save('template.xlsx')

1 个回答

1

根据提问者的评论

这个问题通过更新到最新的版本2.02解决了。

撰写回答