【发布时间】:2015-05-11 18:36:12
【问题描述】:
Python 2.7。我正在使用 xlsxwriter。
假设我有myDict = {1: 'One', 2: 'Two', 3: 'Three'}
我需要对值执行一些转换并将结果写入电子表格。
所以我编写了一个函数来创建一个新文件并在其中放置一些标题并进行格式化,但不要关闭它,以便我可以在下一个函数中进一步编写。
然后我编写另一个函数来转换我的 dict 值并将它们写入工作表。
在上课方面我是个菜鸟,所以如果这看起来很愚蠢,请原谅我。
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() 写入?
【问题讨论】:
-
你是什么意思“不[工作]”?错误信息?意外的输出?你确保
setup_new_spreadsheet在write_data之前被调用了吗? -
@jonrsharpe 抱歉,我添加了有关类型错误的详细信息。是的,我正在按顺序调用函数。
-
显然
self.writeWorkbook.add_worksheet没有返回任何内容。也许你应该看看图书馆的文档? -
这么短的代码中有很多误解。我建议在尝试编写 Excel 文件之前先处理一些 OOP 和 Python 基础知识。
-
@AutomaticStatic:不,着名的garkin 是对的。您发布的代码中有许多问题。如果您认为写入 Excel 并不难(这是一个公平的评估,当然对于任何精通 XlsxWriter 的人来说),那么您应该考虑根本不使用类,而只使用函数和全局变量。一些学术类型不会喜欢它,但它会更容易理解并且更容易为新手做好准备。