2012-06-26 52 views
5

Không phải của các quá trình, như được mong đợi đọc các tài liệu hướng dẫn:file Bế mạc trong openpyxl

worksheet.close() 
workbook.close() 

Có cách nào để đóng tập tin một lần thực hiện trong openpyxl? Hay nó được xử lý tự động khi chương trình thoát? Tôi không muốn để lại bảng tính treo trong bộ nhớ.

Trả lời

9

bạn cũng có thể có một cái nhìn vào mã nguồn, Im hiện đang sử dụng 1.5.5 như vậy

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 

nó trông giống như có nó không đóng các kho lưu trữ, khi chúng ta tải một bảng tính, làm thế nào về việc khi nào chúng tôi lưu nó?

def save(self, filename): 
    """Write data into the archive.""" 
    archive = ZipFile(filename, 'w', ZIP_DEFLATED) 
    self.write_data(archive) 
    archive.close() 

có vẻ như nó cũng đóng lưu trữ khi chúng tôi lưu.

Về cơ bản, chúng tôi đọc sổ làm việc excel vào bộ nhớ từ tệp được đóng sau đó, thực hiện cập nhật, nếu chúng tôi không lưu nó, những thay đổi có thể bị mất, nếu chúng tôi lưu nó, tệp sẽ bị đóng sau khi viết.

Có cách nào để đóng tệp khi được thực hiện trong openpyxl không? Hay nó được xử lý tự động khi chương trình thoát? Tôi không muốn để lại bảng tính treo trong bộ nhớ.

bạn có thể lưu thay đổi của bạn sử dụng wb.save(filename = dest_filename) như đối với handled automatically khi readin hoặc bằng văn bản cho một tập tin sau đó có đóng nó sau phẫu thuật nhưng có openpyxl tự động lưu các thay đổi của bạn sau đó không được rằng class Workbook(object): không có __del__ sau đó không có gì được gọi là khi đối tượng đó bị xóa hoặc thu thập rác, một lần nữa, điều này là dành cho 1.5.5 phiên bản hiện tại là 1.5.8 như của bài viết này, tôi nghi ngờ có nhiều thay đổi.

+0

hm rất thú vị. Phiên bản hiện tại thực sự là 1.5.8, nhưng yeah tôi nghi ngờ có bất cứ điều gì khác nhau. Tôi đoán chỉ để lại nó sẽ là đủ, như tôi không muốn thực hiện/lưu bất kỳ thay đổi, im chỉ đọc dữ liệu, vì vậy điều này sẽ làm việc cho tôi! – zakparks31191

+0

Tôi xin lỗi, tôi đã đọc http://packages.python.org/openpyxl/ Tôi đoán nó đã lỗi thời hoặc một cái gì đó, tôi đã sửa bài viết của tôi, cảm ơn bạn, và có nếu bạn chỉ đọc thì bạn không phải làm bất cứ điều gì. –

+0

yep, các phiên bản mới nhất là trên pypi: http://pypi.python.org/pypi/openpyxl/1.5.8 – zakparks31191

Các vấn đề liên quan