2017-09-14 38 views
0

複数のシートを1つのブックに書き込もうとしていますが、最適な書き込み時間を得るためにpyexcelerateを使用しています。複数のシートを同じブックに書き込むPython pyexcelerateライブラリ?

はここで、ブックへの書き込みに私の現在のコードです:私は一枚のみが必要な場合は

def df_to_excel(df, path, sheet_name='Sheet 1'): 
    data = [df.columns.tolist(), ] + df.values.tolist() 
    wb = Workbook() 
    wb.new_sheet(sheet_name, data=data) 
    wb.save(path) 

は今、これは完全に正常に動作します。ただし、複数のシートに書き込むと、最後のシートのみが保持されます(前に生成されたシートはすべて置き換えられます)。

私はすべてのシート(差分名はOFCを持つ)を維持したい、と私は彼らのgithubのページに見えたが、私はそのような機能についての情報を見つけることができません。私はまた、いくつかの他のStackOverflowの記事の中に見えた https://github.com/kz26/PyExcelerate

  1. Writing resutls into 2 different sheets in the same Excel file
  2. xlwt create dynamic number of worksheets based on input
  3. creating multiple excel worksheets using data in a pandas dataframe
  4. :彼らは異なるパッケージを使用しています

ご了承ください。

+1

'wb = Workbook()'を使って常に新しい** empty **ワークブックを作成し、リンクされたサンプルを再度読みます。 – stovfl

+0

リンクのどれもpyexcelerateライブラリを使用していません。 diffライブラリ全体で使用できるメソッドはありますか? – alwaysaskingquestions

+1

あなたのワークブック**を一度だけ**作成し、それをあなたの 'def df_to_excel(wb、...' – stovfl

答えて

0

別の変数を別のシートのExcelファイルに保存して、Excelファイルのpandas.dataframeのヘッダーとインデックスを保存したい場合は、

import timeit 
    from pyexcelerate import Workbook 

    def to_Excel(data, fileName): 
     start_time = timeit.default_timer() 
     wb = Workbook() 
     for key in data.keys(): 
      ws = wb.new_sheet(key) 
      frame = data[key] 
      frame = frame.transpose() 
      frame.reset_index(level=0, inplace = True) 
      frame = frame.transpose() 
      frame.reset_index(level=0, inplace = True) 
      row_num = frame.shape[0]  
      col_num = 1 
      for col_name, col_series in frame.iteritems(): 
       ws.range((1,col_num), (row_num,col_num)).value = [[x] for x in col_series] 
       col_num += 1  
     wb.save(fileName) 
     end_time = timeit.default_timer() 
     delta = round(end_time-start_time,2) 
     print("Took "+str(delta)+" secs") 

'data'は辞書変数です。 「データ」の「キー」は「シート名」として機能し、各キー値のデータ型はpandasデータフレーム内になければなりません。

関連する問題