10

正如阅读文档所预期的那样,这些过程都不是:

worksheet.close()
workbook.close()

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

4

2 回答 2

19

好吧,你可以看看源代码,我目前使用的是 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)as for保存您的更改handled automatically,然后是的,它在操作后关闭,但是让 openpyxl 自动保存您的更改,然后没有任何东西,然后当该对象被删除或垃圾收集时不会调用任何内容,class Workbook(object):再次__del__这是在撰写本文时1.5.5的当前版本1.5.8,我怀疑已经发生了很大变化。

于 2012-06-26T20:59:32.987 回答
-1

你可以试试这个 wb.Close(True)

于 2020-05-26T02:03:13.690 回答