python 多sheet複雜報表開發

    在實際工作中,報表開發的過程中,往往會遇到各種較爲複雜報表,比如一個報表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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章