我在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')])
在循环体中。 如何修改它以使其工作?
答案 0 :(得分:0)
我有一个类似的类型,我需要多个不同数据的工作表 - 我发现最简单的方法是首先确保进入的数据是按照我决定工作表的顺序排序的 - 在你的情况下是日期。然后需要制作工作表并放入如何知道何时使用不同的工作表。我在工作,所以只是取消了我曾经使用过的东西,或者想到在你的实例中使用什么。希望这会有所帮助。
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