python load_workbook时报错 ValueError: I/O operation on closed file.

在用wb=openpyxl.load_workbook(f_open_path,read_only=0,keep_vba=1,data_only=1,keep_links=0) 加载已有的excel file时报错 ValueError: I/O operation on closed file.
原因已经找到,把read_only=0改成read_only=1就不再报错。

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
根据你的问题描述,可能是因为在打开文件后没有及时关闭文件,导致在调用 openpyxl.load_workbook() 方法时,文件已经被关闭了,从而导致了 "ValueError: I/O operation on closed file" 错误。

你可以尝试在打开文件后及时关闭文件,例如:

with open(f_open_path, 'rb') as f:
    wb = openpyxl.load_workbook(f, read_only=1, keep_vba=1, data_only=1, keep_links=0)

# 在 with 结束后,文件会自动关闭

使用 with 语句可以确保在文件使用完毕后自动关闭文件,避免文件被意外关闭导致的问题。

另外,你也提到了将 read_only 参数从 0 改为 1 后问题得到了解决。这是因为在设置 read_only 参数为 0 时,openpyxl 会以可写模式打开 Excel 文件,这会导致在读取文件时对文件进行写操作,而在文件被关闭之前还没有完成写操作,从而导致了 "I/O operation on closed file" 错误。将 read_only 参数设置为 1 可以避免这个问题,同时也可以提高读取速度。

希望这些信息对你有帮助。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢