2016-05-17 7 views
0

xlsxテーブルに日付属性があります。これは1週間長いレポートです。 私はそれを日付で分割したいと思います。結果のxlsxファイルには7枚のシートが必要で、各シートに関連する情報をそこに配置する必要があります。xlsxwriterを使用して異なるシートにデータを書き込む方法は?

私は書き込みのために、このクラスを使用します。

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

私は、異なるデータに対して複数のワークシートが必要な場合と同様のタイプを持っていました。最初に自分のワークシートを自分の日付で決定していたとしても、データが入ってくることを確認するのが最も簡単でした。次に、ワークシートを作成して、別のワークシートを使用する方法を理解する必要があります。私は職場にいるので、私が使っていたものを取り除いたり、あなたのインスタンスで何を使うべきかを考えていただけです。これはいくつかの助けを願っています

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 
関連する問題