Python 2.7。我正在使用 xlsxwriter。
假设我有 myDict = {1: 'One', 2: 'Two', 3: 'Three'}
我需要对值执行一些转换并将结果写入电子表格。
因此,我编写了一个函数来创建一个新文件,并在其中放入一些 header 并进行格式化,但不要关闭它,以便我可以使用下一个函数进一步编写。
然后我编写另一个函数来转换我的字典值并将它们写入工作表。
我在类(class)方面是个菜鸟,所以如果这看起来很愚蠢,请原谅我。
import xlsxwriter
class ReadWriteSpreadsheet(object):
def __init__(self, outputFile=None, writeWorkbook=None, writeWorksheet=None):
self.outputFile = outputFile
self.writeWorksheet = writeWorksheet
self.writeWorkbook = writeWorkbook
# This function works fine
def setup_new_spreadsheet(self):
self.writeWorkbook = xlsxwriter.Workbook(self.outputFile)
self.writeWorksheet = self.writeWorkbook.add_worksheet('My Worksheet')
self.writeWorksheet.write('A1', 'TEST')
# This one does not
def write_data(self):
# Forget iterating through the dict for now
self.writeWorksheet.write('A5', myDict[1])
x = ReadWriteSpreadsheet(outputFile='test.xlsx')
x.setup_new_spreadsheet()
x.write_data()
我得到:
Exception Exception: Exception('Exception caught in workbook destructor. Explicit close() may be required for workbook.',) in <bound method Workbook.__del__ of <xlsxwriter.workbook.Workbook object at 0x00000000023FDF28>> ignored
文档说这个错误是由于没有关闭工作簿造成的,但如果我关闭它,我就无法进一步写入...
如何构造此类,以便 setup_new_spreadsheet()
中的工作簿和工作表能够由 write_data()
写入?
最佳答案
当 python 意识到您不再需要在代码的其余部分中使用您的工作簿并因此决定将其从内存(垃圾收集)中删除时,就会触发您问题中提到的异常。这样做时,它会意识到您尚未关闭工作簿,因此根本不会将 Excel 电子表格保留在磁盘上(我认为仅在关闭时发生),并将引发该异常。
如果您的类上有另一个关闭方法: self.writeWorkbook.close() 并确保最后调用它,则不会出现该错误。
关于Python:迭代写入 Excel 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30175134/