文件路徑如下:
ExcelPython.py是當前運行文件,紅框內三個文件是原始數據文件,每個文件內有三個sheet,含日期類型。如下:
我們要計算每個工作簿的工作表中值的總和與平均值,寫入原文件(這裏先複製出一份和原來一樣的文件後寫入新文件)
知識點如下:pandas的函數、讀取多個工作簿下的多個工作表、同時向一個Excel文件內寫入多個sheet,一次寫入多個Excel文件
源碼如下:含主要部分註釋:
#計算每個工作簿的工作表中值的總和與平均值,寫入原文件(這裏先複製出一份和原來一樣的文件後寫入新文件)
def read_sum_excel_2():
all_workbooks = glob.glob(os.path.join(os.getcwd(),'sales_*.xlsx'))
for workbook in all_workbooks:
output_file = 'excel_python_write_{}'.format(os.path.basename(workbook).split('sales_')[1])
print(output_file)
all_worksheets = pd.read_excel(workbook,sheet_name=None)
writer = pd.ExcelWriter(output_file)
workbook_total_sales = []#每個excel文件內所有sheet加起來的total_sales總數
workbook_total_averages = []#每個excel文件內所有sheet加起來的total_averages平均數
for worksheet_name,data in all_worksheets.items():
#處理日期格式
data['Purchase Date'] =data['Purchase Date'].dt.strftime('%Y-%m-%d')
#計算總Sale Amount
workbook_total_sales.append(data['Sale Amount'].sum())
total_sale_frame = pd.DataFrame(['Sale_Amount_total','','',data['Sale Amount'].sum(),'']).T
total_sale_frame.columns = data.columns
df_new = pd.concat([data,total_sale_frame],ignore_index=True)
#計算平均Sale Amount
workbook_total_averages.append(data['Sale Amount'].mean())
average_sale_frame = pd.DataFrame(['Sale_Amount_average','','',data['Sale Amount'].mean(),'']).T
average_sale_frame.columns = df_new.columns
df_new = pd.concat([df_new,average_sale_frame],ignore_index=True)
#一個excel寫入多個sheet
df_new.to_excel(writer,sheet_name=worksheet_name,index=False)
#每個工作簿下工作表信息
workbook_total = pd.DataFrame(workbook_total_sales).sum()
workbook_average = pd.DataFrame(workbook_total_averages).mean()
workbook_stats_data = {
'workbook_total':workbook_total,
'workbook_average':workbook_average}
#每個工作簿下工作表信息總和
workbook_stats_frame = pd.DataFrame(workbook_stats_data,columns=['workbook_total','workbook_average'])
workbook_stats_frame.to_excel(writer,sheet_name='count',index=False)#將總和寫入新的sheet裏,作爲全表統計信息
print(workbook_stats_frame)
writer.save()
運行,結果如下:
原表信息拷貝過來,日期類型做了處理,且新增了兩行和一個sheet,新增count sheet顯示如下: