2017-06-14 3 views
1

私は自分の仕事のための少し自動レポートツールを構築しています。私はプログラムを実行してレポートを生成するたびに毎回別のシートを作成するようにコードを作成しようとしています。上書きするのではなく新しいシートを作成する方法

date_time = time.strftime('%b %d %Y') 

writer = pd.ExcelWriter('BrokerRisk.xlsx', engine='xlsxwriter') 
df.to_excel(writer,'DataFrame-' + date_time) 
sums.to_excel(writer,'TotalByCounterparty-' + date_time) 
sums_sort.to_excel(writer,'SortedRank-' + date_time) 

workbook = writer.book 
worksheet1 = writer.sheets['DataFrame-' + date_time] 
worksheet2 = writer.sheets['TotalByCounterparty-' + date_time] 
worksheet3 = writer.sheets['SortedRank-' + date_time] 
writer.save() 

私はそれは毎日、技術的に名前を変更しますように、日付機能を実装しようとしたが、これはどちらか動作するようには思えません。誰でも簡単な修正を提案できますか?

+0

できません。現在の回避策は、ワークブックを開いてコピーし、自分が持っているものを追加して上書きすることです。 – ayhan

+0

どういう意味ですか? pandasやpythonなどの中にappend機能はありませんか? – sgerbhctim

+1

これはPython/pandasではなくExcelの問題です。 [こちら](https://stackoverflow.com/questions/20219254/how-to-write-to-an-existing-excel-file-without-overwriting-data-using-pandas)はいくつかの回避策ですが、これらのまた、コピーを行い、フードの下に新しいファイルを作成します(コメントも参照してください)。 – ayhan

答えて

1

writerとしてengine=openpyxlを使用すると、たとえば、あなたがやりたいことになります。

のPythonでテスト
from openpyxl import load_workbook 
from copy import copy 
import time 

class CopyWorkbook(object): 
    def __init__(self, fname): 
     self.fname = fname 
     self.wb = load_workbook(fname) 

    def save(self): 
     self.wb.save(self.fname) 

    def copy_worksheet(self, from_worksheet): 
     # Create new empty sheet and append it to self(Workbook) 
     ws = self.wb.create_sheet(title=from_worksheet.title) 

     for row, row_data in enumerate(from_worksheet.rows,1): 
      for column, from_cell in enumerate(row_data,1): 
       cell = ws.cell(row=row, column=column) 
       cell.value = from_cell.value 
       cell.font = copy(from_cell.font) 

date_time = time.strftime('%b %d %Y') 
writer = pd.ExcelWriter('dummy.xlsx', engine='openpyxl') 
df.to_excel(writer,'DataFrame-' + date_time) 
# ... Other DataFrame's .to_excel(writer, ... 

wb = CopyWorkbook('BrokerRisk.xlsx') 
for ws_new in writer.book.worksheets: 
    wb.copy_worksheet(ws_new) 

wb.save() 

:3.4.2 - openpyxl:2.4.1 - LibreOfficeの:4.3.3.2

+0

ありがとうございます - 少し試してみます。 – sgerbhctim

関連する問題