无法使用openpyxl

时间:2019-11-19 15:15:47

标签: python excel openpyxl windowserror

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

  

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

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

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安装,并且我需要访问arcpy模块的元数据功能,而该功能没有Python 3等效项。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

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

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

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

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