这些过程都没有,正如预期的那样阅读文档:
worksheet.close()
workbook.close()
有没有办法在openpyxl中完成后关闭文件?或者在程序退出时自动处理?我不想让电子表格留在内存中。
答案 0 :(得分:13)
你可以看看源代码,我目前正在使用1.5.5
def load_workbook(filename, use_iterators=False):
if isinstance(filename, file):
# fileobject must have been opened with 'rb' flag
# it is required by zipfile
if 'b' not in filename.mode:
raise OpenModeError("File-object must be opened in binary mode")
try:
archive = ZipFile(filename, 'r', ZIP_DEFLATED)
except (BadZipfile, RuntimeError, IOError, ValueError), e:
raise InvalidFileException(unicode(e))
wb = Workbook()
if use_iterators:
wb._set_optimized_read()
try:
_load_workbook(wb, archive, filename, use_iterators)
except KeyError, e:
raise InvalidFileException(unicode(e))
finally:
archive.close()
return wb
它似乎是关闭存档,当我们加载工作簿时,我们何时保存它?
def save(self, filename):
"""Write data into the archive."""
archive = ZipFile(filename, 'w', ZIP_DEFLATED)
self.write_data(archive)
archive.close()
看起来它在保存时也会关闭存档。
从根本上我们将一个excel工作簿从一个文件中读入内存,然后关闭,进行更新,如果我们不保存它,可能会丢失更改,如果我们保存它,文件在写完后就会关闭。
有没有办法在openpyxl中完成后关闭文件?或者在程序退出时自动处理?我不想让电子表格留在内存中。
您可以在阅读或写入文件时使用wb.save(filename = dest_filename)
和handled automatically
保存更改,然后在操作后关闭,但是openpyxl会自动保存您的更改,然后否由于class Workbook(object):
没有__del__
,因此当删除该对象或进行垃圾回收时,不会调用任何内容,同样适用于1.5.5
当前版本为1.5.8
写作,我怀疑已经发生了很大变化。
答案 1 :(得分:-1)
您可以尝试一下
wb.Close(True)