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)

 

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