I/O operation on closed file.
求助求助,代码如下:wb1=openpyxl.load_workbook(p1)
ws1=wb1.worksheets
wb=openpyxl.load_workbook(p2)
ws=wb.worksheets
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
image.height = 60
image.width = 60
ws1.row_dimensions.height = 50
ws1.row_dimensions.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, 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. 这个错误是由于在保存工作簿时,尝试写入图像数据时出错。错误的原因是图像对象所引用的文件已经关闭。
这个问题可能是由于在打开图像文件时,没有正确地关闭文件对象所导致的。为了解决这个问题,你可以尝试在使用完图像对象后,显式地关闭文件对象。
你可以修改代码如下:
wb1.save(p1)
wb1.close()# 添加这一行代码来关闭文件对象
这样,当保存工作簿时,相关的文件对象将被正确地关闭,避免了"ValueError: I/O operation on closed file"错误的发生。 根据您提供的代码和错误信息,问题可能出在 openpyxl 库中读取图像数据时发生了错误。具体来说,报错指出在尝试从文件中读取图像数据时,文件已关闭。
可以尝试以下解决方案:
1. 确保图像文件存在:检查代码中用于读取图像数据的路径是否正确,并确保图像文件存在。
2. 检查文件打开方式:确认在读取图像文件之前,文件是以可读模式打开的。可以使用 with open() 语句来确保文件在读取完毕后自动关闭。
3. 检查图像格式:确保图像文件的格式受 openpyxl 支持。常见支持的图像格式包括 JPEG、PNG、BMP 等。
4. 更新相关库:尝试更新 openpyxl 和 PIL(或 pillow)库到最新版本,以确保使用的是最新的修复bug的版本。
5. 使用绝对路径:尝试使用绝对路径来访问图像文件,而不是相对路径。
6. 检查文件状态:如果在读取图像之前有其他操作修改了文件的状态或关闭了文件,请确保在读取图像之前文件处于正确打开的状态。
请根据以上建议逐一排查问题,并进行相应的修改。如果问题仍然存在,请提供更多上下文信息,以便我能够更好地帮助您解决问题。
球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
isdkz 发表于 2023-9-8 17:28
这个错误是由于在保存工作簿时,尝试写入图像数据时出错。错误的原因是图像对象所引用的文件已经关闭。
...
试过了,没有用。尝试了每次在需要写入图像的时候,再打开一次,解决了。
页:
[1]