Python:迭代写入 Excel 文件

标签 python excel

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/

相关文章:

python - pandas - 按列名屏蔽数据框

Python 连接字符串和函数

xml - 在 Excel 中使用 XML

excel - 查找大数据集中连续空白的位置 - EXCEL

Python3.5.2 bdist_wininst : Python version -32 required, 在注册表中找不到

python - 如何在 Python 中调试卡住的 asyncio 协程?

python - 我如何在Python中迭代函数来创建数组?

excel - 在 Excel 中验证 IBAN

.net - Windows 7 .net Excel .SaveAs() 来自 HRESULT : 0x800A03EC 的错误异常

VBA Excel 2010 编辑器将属性名称大写,无法访问