繁体   English   中英

如何使用xlsxwriter将数据写入不同的工作表?

[英]How to write data to different sheets using xlsxwriter?

我在xlsx表中有date属性。 这是一个为期一周的报告。 我想按日期分开。 结果xlsx文件应该有7张纸,并且应该在那里放置与每张纸相关的信息。

我用这个类写作:

class DictWriter:
    def __init__(self, workbook, worksheet, fieldnames):
        self.workbook = workbook
        self.worksheet = worksheet
        self.fieldnames = fieldnames
        self.nrow = 1

    def writerow(self, d):
        for k in d:
            ncol = self.fieldnames.index(k)
            self.worksheet.write(self.nrow, ncol, d[k])
        self.nrow += 1

    def writeheader(self):
        for ncol, fieldname in enumerate(self.fieldnames):
            self.worksheet.write(0, ncol, fieldname)

并在迭代开始时(我遍历文件中的HTTP JSON结果部分)。 工作表的创建仅在循环之前执行一次:

def file_generator():
    link = "http://example.com"
    client = requests.get(link)
    response = client.json()['response']
    if response['httpStatus'] == 200:
        workbook = xlsxwriter.Workbook('WeeklyReport.xlsx', {'strings_to_numbers': True})
        worksheet = workbook.add_worksheet()
        data_table = response['data']['data']
        fieldnames = ["Date", "Advertiser", "Offer", "Revenue"]
        writer = DictWriter(workbook, worksheet, fieldnames)
        writer.writeheader()
        for d in data_table:
               row_dict = {"Date": d['Stat']['date'], "Advertiser": d['Advertiser']['company'], "Offer": d['Offer']['name'], "Revenue": d['Stat']['revenue']}
                writer.writerow(row_dict)

如何修改现有逻辑以按工作表中的日期写入所有记录?

在我的情况下,我这样做:

def key_value_gen(k):
    result = date.today() - timedelta(k)
    result = result.strftime('%Y-%m-%d')
    yield result
    yield 1

class DictWriter:
    def __init__(self, workbook, worksheet, fieldnames):
        self.workbook = workbook
        self.worksheet = worksheet
        self.fieldnames = fieldnames
        self.nrows = dict(map(key_value_gen, range(0, 8)))

    def writerow(self, d, condition=0):
        for k in d:
            ncol = self.fieldnames.index(k)
            self.worksheet.write(self.nrows[self.worksheet.name], ncol, d[k])
        print self.worksheet.name
        self.nrows[self.worksheet.name] += 1

    def changeworksheet(self, worksheet):
        self.worksheet = worksheet

    def writeheader(self):
        for ncol, fieldname in enumerate(self.fieldnames):
            self.worksheet.write(0, ncol, fieldname)

但是当我施放时,它无法正常工作(创建7张,但只在第一张中写入):

    for day in range(1,8):
        daydelta = date.today() - timedelta(day)
        daydelta = daydelta.strftime('%Y-%m-%d')
        sheet = workbook.add_worksheet(daydelta)
        sheets[sheet.name] =  worksheet

接着:

writer.changeworksheet(sheets[d['Stat']['date'].encode('utf-8')])

在循环的身体。 如何修改它使其工作?

我有一个类似的类型,我需要多个不同数据的工作表 - 我发现最简单的方法是首先确保进入的数据按照我决定工作表的顺序排序 - 在你的情况下是日期。 然后需要制作工作表并放入如何知道何时使用不同的工作表。 我在工作,所以只是取消了我曾经使用过的东西,或者想到在你的实例中使用什么。 希望这会有所帮助。

worksheetNE = workbook.add_worksheet('Northeast Region')
worksheetNW = workbook.add_worksheet('Northwest Region')
worksheetSE = workbook.add_worksheet('Southeast Region')
if region.upper()=='NORTHEAST REGION':
    worksheet=worksheetNE
elif region.upper()=='NORTHWEST REGION':
    worksheet=worksheetNW
elif region.upper()=='SOUTHEAST REGION':
    worksheet=worksheetSE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM