2017-09-14 94 views
0

我正在嘗試將多張表寫入一個工作簿,並且我正在使用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) 

現在這個工作完全正常,如果我只需要一個片;然而,如果我在多張紙上書寫,只有最後一張紙將被保留(所有以前生成的紙張將被替換)。

我要保留所有工作表(與DIFF名OFC),我看着他們的GitHub的頁面,但我不能找到這樣的能力信息: 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

任何幫助表示讚賞!

+1

你總是使用'WB =工作簿()',重讀鏈接實例創建一個新的** **的空工作簿。 – 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'的'key'作爲'表名',每個鍵值的數據類型應該在pandas數據框中。

相關問題