Python-目錄下相同格式的Excel文件合並


最近在客戶現場接到一個任務,需要將全國所有省份的數據進行合並。目錄是分層級的,首先是省份目錄、然后地級市目錄、最里面是區縣目錄。
需要將每個目錄中的數據進行合並,然后添加4列數據,並將某一個列的數據進行拆分和處理。總共將近3000張個Excel文件需要處理,
如果手工處理的話,估計要搞一個星期才能搞完。為了在規定時間內完成任務,我通過編寫python程序實現了這樣的功能。
這里我簡單分享下單個目錄中Excel文件合並的模塊。

 

 

Python代碼:

#!/usr/bin/env python
# coding:utf-8
"""
@File Name: zwc002.py
@Version: 1.0
@Python Version: 3.7
@Author: liguanbin
@Created Time: 2021/5/21 9:04
@Software: PyCharm
@Desc:
"""

import os
import xlrd
import xlsxwriter
import glob


# 獲取要合並的所有excel表格
def get_excel():
global file_path
global current_folder
global new_excel_path

file_path = input("請輸入Excel文件所在的目錄:")

if not file_path.endswith('\\'):
current_folder = os.path.basename(file_path)
file_path = file_path + "\\"
else:
current_folder = os.path.basename(os.path.dirname(file_path))

new_excel=current_folder + "_合並結果.xlsx"
new_excel_path = os.path.join(file_path,new_excel)
# 新建的exce文件絕對路徑

if os.path.isfile(new_excel_path):
os.remove(new_excel_path)
# 如果文件已經存在就刪除,避免重復執行插入重復

all_excel = glob.glob(file_path + "*.xlsx")
print("該目錄下有" + str(len(all_excel)) + "個Excel文件:")
if (len(all_excel) == 0):
return 0
else:
for i in range(len(all_excel)):
print(all_excel[i])
return all_excel


# 獲取sheet下的數據
def get_sheet_data(sheet):
row = sheet.nrows
for i in range(row):
if (i == 0):
global biao_tou
biao_tou = sheet.row_values(i)
continue
values = sheet.row_values(i)
all_data1.append(values)

return all_data1


if __name__ == '__main__':

all_excel = get_excel()
# 得到要合並的所有exce表格數據

if (all_excel == 0):
print("該目錄下無.xlsx文件!請檢查您輸入的目錄是否有誤!")
exit()

all_data1 = []
# 用於保存合並的所有行的數據

# 下面開始文件數據的獲取
for excel in all_excel:

fh = xlrd.open_workbook(excel)
# 打開文件
sheets = fh.sheets()
# 獲取文件下的所有sheet

for sheet_index in range(len(sheets)):

all_data1 = get_sheet_data(sheets[sheet_index])
# 獲取一個sheet下的所有行的數據,追加到數組中

all_data1.insert(0, biao_tou)
# 表頭寫入(只需要寫入一個)

fh1 = xlsxwriter.Workbook(new_excel_path)
# 新建一個excel表

title_formater=fh1.add_format({'border': 1,'bold':True,'align':'center','bg_color':'3399FF','font_size':12})
# 標題格式:邊框:1、加粗、居中、填充:藍色、字體:12
common_formater = fh1.add_format({'border': 1})
# 數據格式:邊框:1

new_sheet_name="執常委列表"
# 指定sheet的名稱
new_sheet = fh1.add_worksheet(new_sheet_name)
# 新建一個sheet

for i in range(len(all_data1)):
for j in range(len(all_data1[i])):
c = all_data1[i][j]
if i==0:
new_sheet.write(i, j, c, title_formater)
else:
new_sheet.write(i, j, c,common_formater)

fh1.close()
# 關閉該exce表

print("\033[1;34m文件合並成功,請查看" + new_excel_path + "\033[0m")


效果演示:

 

 合並后的文件:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM