按分類分割EXCEL檔案
阿新 • • 發佈:2018-11-09
在管理工作中,會碰到把報表分割成不同的下屬單位,或者把下屬單位上報的報表分割成不同的業務種類。
示例:
待分割工作表 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 |
分割後的檔案: