关闭openpyxl中的文件

时间:2012-06-26 19:49:23

标签: python file openpyxl

这些过程都没有,正如预期的那样阅读文档:

worksheet.close()
workbook.close()

有没有办法在openpyxl中完成后关闭文件?或者在程序退出时自动处理?我不想让电子表格留在内存中。

2 个答案:

答案 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)