在實際工作中,報表開發的過程中,往往會遇到各種較爲複雜報表,比如一個報表excel裏面有多個sheet,每個sheet都是不同維度的統計指標,如何形成這樣多sheet的報表呢? 廢話不多說,代碼這就來見:
#!/usr/bin/python2.7
# -*- coding:utf-8 -*-
"""
File: Excel.py
Author: yyz
Date: 2019/06/02 15:26
"""
import csv
import codecs
import pandas as pd
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
class Excel(object):
def __init__(self):
pass
def save_to_excel(self, out_save_excel_name="test_demo2.csv", in_save_data_list=[['20200220','channelA','1000'],['20200221','channelB','30000']], in_head_list=['日期', '產品名稱/彙總', 'H5詳情頁UV']):
'''
:param out_save_excel_name: 要保存的excel名字
:param in_save_data_list: 要寫入excel的數據
:param in_head_list: excel的head頭,即列名列表
:return:
'''
with codecs.open(out_save_excel_name, 'w', 'utf_8_sig') as f:
writer = csv.writer(f, dialect='excel')
writer.writerow(in_head_list) # 寫入列的名稱
writer.writerows(in_save_data_list)
def merge_two_csv_to_one_excel(self, csv_name1, csv_name2, sheet_name1, sheet_name2, final_out_excel="test.xlsx"):
'''
:param csv_name1: 要合併的csv excel1
:param csv_name2: 要合併的csv excel2
:param sheet_name1: 要合併的csv excel1對應的sheet名字
:param sheet_name2: 要合併的csv excel2對應的sheet名字
:param final_out_excel: 最終合併後形成的excel名字
:return:
'''
# 讀取兩個表格
dataframeab = pd.read_csv(csv_name1)
dataframecd = pd.read_csv(csv_name2)
# 將兩個表格輸出到一個excel文件裏面
writer = pd.ExcelWriter(final_out_excel)
dataframeab.to_excel(writer, sheet_name=sheet_name1, index=False)
dataframecd.to_excel(writer, sheet_name=sheet_name2, index=False)
# 必須運行writer.save(),不然不能輸出到本地
writer.save()
def merge_all_csv_to_one_excel_sheet(self, out_final_save_excel="final.xlsx", in_map_csv_name_to_sheet_name={"csv_name1.csv": "sheet_name1", "csv_name2.csv": "sheet_name2", "csv_name3.csv": "sheet_name3"}):
'''
:param out_final_save_excel: 最終合併後形成的excel名字
:param in_map_csv_name_to_sheet_name: 要合併的csv excel爲key,其對應的sheet名字爲value的字典
:return:
'''
# 將多個個表格輸出到一個excel文件裏面
writer = pd.ExcelWriter(out_final_save_excel)
for csv_name in in_map_csv_name_to_sheet_name: # 循環讀取每個表格
dataframe = pd.read_csv(csv_name)
sheet_name = in_map_csv_name_to_sheet_name[csv_name]
dataframe.to_excel(writer, sheet_name=sheet_name, index=False) # 將每個表格合併到最終的excel中
# 必須運行writer.save(),不然不能輸出到本地
writer.save()
if __name__ == '__main__':
obj_Excel = Excel()
obj_Excel.save_to_excel()
map_csv_name_to_sheet_name = {"test_demo.csv": "sheet_name1", "test_demo1.csv": "sheet_name2", "test_demo2.csv": "sheet_name3"}
obj_Excel.merge_all_csv_to_one_excel_sheet(out_final_save_excel="final.xlsx", in_map_csv_name_to_sheet_name=map_csv_name_to_sheet_name)