首页 > 解决方案 > 无法使用 openpyxl 写入输出 excel 文件

问题描述

我一直在使用 openpyxl 编写一个脚本,直到昨天我不小心关闭了我的 GUI 中途进程时它一直正常工作。从那时起,我的脚本就无法保存到任何目录中的新 excel 文件中。我使用 PyCharm 作为我的 IDE。每当我运行脚本时,我都会收到以下错误:

WindowsError:[错误 32] 进程无法访问该文件,因为它正被另一个进程使用:'c:\users\ username \appdata\local\temp\openpyxl.izzaxe'

这工作正常,所以我不认为这是我的代码的问题,但我在下面包含了一个片段:

wb = load_workbook(filename=r'PATH TO SOME EXCEL FILE')
header = wb['Sheet1'][1:1]
listheader = []
for h in listheader:
    listheader.append(h.value)
wb['Sheet2'].append(listheader)
wb.save(filename=r'PATH TO A DIFFERENT EXCEL FILE'

我已关闭 PyCharm 并重新打开,但仍收到错误消息。我还导航到 **c:\users\username\appdata\local\temp** 并删除了导致阻塞的文件,但是当我重新运行我的脚本时,会生成一个具有不同扩展名的新 openpyxl 文件目录并阻止我的脚本保存新文件。我目前在我的 **appdata\local\temp** 目录中有 5 个不同的带有随机扩展名的 openpyxl 临时文件

我还重新启动了计算机,并使用 pip 卸载并重新安装了 openpyxl,但均未成功。我也尝试通过 CMD 和 IDLE 运行脚本,但我收到相同的错误消息。

我正在使用 Python 2.7,这是必需的,因为它是 ArcGIS 附带的默认 Python 安装,并且我需要访问没有 Python 3 等效项的 arcpy 模块的元数据功能。任何帮助是极大的赞赏。

标签: pythonexcelopenpyxlwindowserror

解决方案


事实证明,这实际上是由我的一部分代码引起的。我正在为我的输出定义列尺寸,如下所示:

wb['Sheet1'].column_dimensions['A'] = 100
wb['Sheet1'].column_dimensions['C'] = 50
wb['Sheet1'].column_dimensions['D'] = 50
wb['Sheet1'].column_dimensions['E'] = 150
wb['Sheet1'].column_dimensions['F'] = 150

不包括宽度属性是导致脚本失败的原因。将以上内容修改为以下内容解决了我的问题:

wb['Sheet1'].column_dimensions['A'].width = 100
wb['Sheet1'].column_dimensions['C'].width = 50
wb['Sheet1'].column_dimensions['D'].width = 50
wb['Sheet1'].column_dimensions['E'].width = 150
wb['Sheet1'].column_dimensions['F'].width = 150

这可能是我找到答案的以下线程的副本: Stuck on AttributeError: 'int' object has no attribute 'reindex' when trying to save workbook in openpyxl


推荐阅读