1. 程式人生 > >按分類分割EXCEL檔案

按分類分割EXCEL檔案

在管理工作中,會碰到把報表分割成不同的下屬單位,或者把下屬單位上報的報表分割成不同的業務種類。

示例:

待分割工作表 SALES.XLSX

產品號 銷量 客戶 說明
A2312 100 V01  
A2311 120 V02  
A2311 200 V03 TEST
A2313 50 V04  
A2315 80 V05  
A2318 130 V06  
A2311 120 V07  
A2314 200 V08 OK
A2313 50 V09  
A2312 80 V10  
產品號 銷量
客戶 說明
A2312 100 C01  
A2311 120 C02  
A2311 200 C03 TEST
A2313 50 C04  
A2315 80 C05  

  分割依據: CATE.XLSX

CATE
PRD_ID
洗滌用品 A2311
食品 A2312
食品 A2313
食品 A2314
食品 A2315
洗滌用品 A2318

 

# coding=UTF-8
"""
標題:Excel檔案分割
功能:檢索excel 檔案,按標識列,儲存到N個檔案中。
開發人員:seakingx
建立時間:2018.11.02
最後修改:2018.11.05
python 2.7
"""
def split_test():
    xls_file = r"CATE.xlsx"
    data = pd.read_excel(xls_file, 0)
    rows = data.shape[0]  # 獲取行數 shape[1]獲取列數
    department_dict = {}
    department_list = []
    for i in range(rows):
        temp = data['CATE'][i]
        key = data['PRD_ID'][i]
        if temp not in department_list:
            department_list.append(temp)  # 將分類存在一個列表中
            department_dict[temp] = [key]  # 建立分類字典
        else:
            # 分類字典新增資料
            key_list = department_dict[temp]
            key_list.append(key)
            department_dict[temp] = key_list
    print len(department_list), rows, len(department_dict)

    # for di in department_dict:
    #     print di, department_dict[di]
    ret_data =  {'list': department_list, 'dict': department_dict}
    split_work = {"xls_file": r"DATA\sales.xlsx", "xls_fld": u"產品號", "file_head": u"產品_", "dir": "DATA"}
    split_work['dict_list'] = ret_data['dict']
    split_work['file_list'] = ret_data['list']

    xls_file = split_work['xls_file']
    fld_key = split_work['xls_fld']

    # 工作表數量
    xl = pd.ExcelFile(xls_file)
    xls_sheet_len = len(xl.sheet_names)

    # 獲取市縣列表、機構程式碼名稱對應表、市縣機構字典
    department_list = split_work['file_list']
    department_dict = split_work['dict_list']

    # 按分類遍歷資料、寫入資料
    work_info = []
    for department in department_list:
        print department
        file_name = u"{0}\{1}{2}.xlsx".format(split_work['dir'], split_work['file_head'], department)
        work_item = [department, file_name]
        xls_save_file = pd.ExcelWriter(file_name)
        # 遍歷工作表
        for sheet_i in range(xls_sheet_len):
            data = pd.read_excel(xls_file, sheet_i)
            rows = data.shape[0]  # 獲取行數 shape[1]獲取列數
            new_df = pd.DataFrame()
            # 遍歷行,篩選資料
            for i in range(0, rows):
                if data[fld_key][i] in department_dict[department]:
                    new_df = pd.concat([new_df, data.iloc[[i], :]], axis=0, ignore_index=True)
            # 寫入工作表
            work_item.append(len(new_df))
            new_df.to_excel(xls_save_file, sheet_name=xl.sheet_names[sheet_i], index=False)
        # 儲存檔案
        xls_save_file.save()
        work_info.append(work_item)
        for w in work_item:
            print w,
        print "完成"
    work_df = pd.DataFrame(work_info, columns=[u'分類', u'檔名'] + xl.sheet_names, dtype=float)
    rpt_file_name = split_work['file_head'] + u"_統計.xlsx"
    work_df.to_excel(rpt_file_name, sheet_name=u'統計', index=False)

完成結果示範:

統計表

分類 檔名 分店1 分店2
洗滌用品 DATA\產品_洗滌用品.xlsx 4 2
食品 DATA\產品_食品.xlsx 6 3

 

分割後的檔案: