鱼C论坛

 找回密码
 立即注册
查看: 1807|回复: 3

I/O operation on closed file.

[复制链接]
发表于 2023-9-8 17:28:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求助求助,代码如下:
wb1=openpyxl.load_workbook(p1)
ws1=wb1.worksheets[0]
wb=openpyxl.load_workbook(p2)
ws=wb.worksheets[0]
r=1
for j in range(18,ws1.max_row):
    for i in ws['B']:
        if i.value==ws1['U' + str(j)].value:
            image=ws._images[i.row-1]
            image.height = 60
            image.width = 60
            ws1.row_dimensions[j].height = 50
            ws1.row_dimensions[j].width = 50
            ws1.add_image(image, 'Q' + str(j))
            ws1['U' + str(j)].value=''
            break
wb1.save(p1)

报错:
wb1.save(r'C:\Users\Administrator\Desktop\1.xlsx')
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\workbook\workbook.py", line 386, in save
    save_workbook(self, filename)
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\writer\excel.py", line 294, in save_workbook
    writer.save()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\writer\excel.py", line 275, in save
    self.write_data()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\writer\excel.py", line 79, in write_data
    self._write_images()
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\writer\excel.py", line 116, in _write_images
    self._archive.writestr(img.path[1:], img._data())
                                         ^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\drawing\image.py", line 48, in _data
    img = _import_image(self.ref)
          ^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\Administrator\AppData\Local\Programs\Python\Python311\Lib\site-packages\openpyxl\drawing\image.py", line 16, in _import_image
    img = PILImage.open(img)
          ^^^^^^^^^^^^^^^^^^
  File "D:\pyoby\venv\Lib\site-packages\PIL\Image.py", line 3240, in open
    fp.seek(0)
ValueError: I/O operation on closed file.

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-8 17:28:27 | 显示全部楼层
这个错误是由于在保存工作簿时,尝试写入图像数据时出错。错误的原因是图像对象所引用的文件已经关闭。

这个问题可能是由于在打开图像文件时,没有正确地关闭文件对象所导致的。为了解决这个问题,你可以尝试在使用完图像对象后,显式地关闭文件对象。

你可以修改代码如下:
wb1.save(p1)
wb1.close()  # 添加这一行代码来关闭文件对象

这样,当保存工作簿时,相关的文件对象将被正确地关闭,避免了"ValueError: I/O operation on closed file"错误的发生。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-8 17:28:40 | 显示全部楼层
根据您提供的代码和错误信息,问题可能出在 openpyxl 库中读取图像数据时发生了错误。具体来说,报错指出在尝试从文件中读取图像数据时,文件已关闭。

可以尝试以下解决方案:

1. 确保图像文件存在:检查代码中用于读取图像数据的路径是否正确,并确保图像文件存在。

2. 检查文件打开方式:确认在读取图像文件之前,文件是以可读模式打开的。可以使用 with open() 语句来确保文件在读取完毕后自动关闭。

3. 检查图像格式:确保图像文件的格式受 openpyxl 支持。常见支持的图像格式包括 JPEG、PNG、BMP 等。

4. 更新相关库:尝试更新 openpyxlPIL(或 pillow)库到最新版本,以确保使用的是最新的修复bug的版本。

5. 使用绝对路径:尝试使用绝对路径来访问图像文件,而不是相对路径。

6. 检查文件状态:如果在读取图像之前有其他操作修改了文件的状态或关闭了文件,请确保在读取图像之前文件处于正确打开的状态。

请根据以上建议逐一排查问题,并进行相应的修改。如果问题仍然存在,请提供更多上下文信息,以便我能够更好地帮助您解决问题。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-8 17:48:04 | 显示全部楼层
isdkz 发表于 2023-9-8 17:28
这个错误是由于在保存工作簿时,尝试写入图像数据时出错。错误的原因是图像对象所引用的文件已经关闭。

...

试过了,没有用。尝试了每次在需要写入图像的时候,再打开一次,解决了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 13:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表