概述
批量合并多个工作簿中的同名工作表
使用Python的xlwings模块批量合并多个工作簿中的同名工作表
import os
import xlwings as xw
import pandas as pd
'''
批量合并多个工作簿中的同名工作表
'''
# 给出要合并的工作表的文件路径
file_path = r'E:pythonExample 1要合并的表'
# 给出文件夹下所有文件的名称
file_list = os.listdir(file_path)
# 给出要合并的同名工作表的名称
sheet_name = '实验项目表'
# 定义变量header,初始值为一个空对象,后面用于存放要合并的工作表中数据的列标题
header = None
# 定义一个空列表,用于存放要合并的数据
all_data = []
# 合并记录总分
sum_rows = 0
# 启动Excel应用程序
app = xw.App(visible=True, add_book=False)
'''1遍历要合并Excel的文件夹下的文件名称'''
for i in file_list:
if i.startswith('~$'):
continue
# 构造要合并的工作簿的文件路径
file_paths = os.path.join(file_path,i)
# 打开要合并的工作簿
workbook = app.books.open(file_paths)
sheetnames = workbook.sheets
'''2遍历工作簿中的工作表'''
for j in sheetnames:
# 3判断工作表的名称是否为“实验项目表”
if j.name == sheet_name:
# 4判断变量header变量中是否已经存放了列标题
if header == None:
# 如果未存放,则读取列标题并赋给变量header
header = j['A1:W5'].value
# 5读取要合并工作表中的数据,用j['A6'].expand('table').value时中间有空格会中断数据
max_rows = j.used_range.last_cell.row
max_columns = j.used_range.last_cell.column
# 6获取数据内容
values = j[f'A6:W{max_rows}'].value
'''
7每一张表中检查每一行数据,是否有整行为空的记录,使用列表倒序方法删除列表中元素的全为None值的空行
解析:values = [n for n in values if any(n)]
过虑:values = filter(lambda x : any(x),values)
'''
# for k in range(len(values)-1,-1,-1):
# # 判断每一条记录(k中)的元素全为None时返回True,或者用all(i is None for i in k)
# if not any(values[k]):
# # 进行删除行
# values.remove(values[k])
print(values)
# 8合并多个工作簿中的同名工作表数据
all_data = all_data + values
# 可以最后总的数据进行过虑
all_data = [n for n in all_data if any(n)]
print(j)
print(all_data)
print('合并的记录数all_data:%d ' %(len(all_data)))
# 9新建工作簿,等同app.books.add()
new_workbook = xw.Book()
# 10在新建的工作簿中新建工作表,名称为指定的合并的工作表名称
new_worksheet = new_workbook.sheets.add(sheet_name)
# 11将要合并的工作表的列标题复制写入至新增工作表中
new_worksheet['A1'].value = header
# 12将合并后的工作表数据内容复制写入到新增工作表中
new_worksheet['A6'].value = all_data
# 13根据合并后数据内容自动调整新增工作表的行高和列宽,autofie(axis=None),
'''格式样式设置'''
"""合并单元格"""
# 合并单元格
new_worksheet.range('A1:W1').merge()
new_worksheet.range('A2:W2').merge()
new_worksheet.range('A3:W3').merge()
"""设置边框,
与可以用for循环写:
# 遍历每一个单元格,设置边框线
for cell in j['A1'].expand('table'):
# 对每一个单元的四周(7,8,9,10)画线,数字表示四边代号
for b in range(7, 12):
# 设置单元格的边框线型
cell.api.Borders(b).LineStyle = 1
# 设置单元格的边框粗细
cell.api.Borders(b).Weight = 2
"""
# 边框线: Borders(5) 单元格内从左上角 到 右下角。
# new_worksheet.range(f'A4:W{len(all_data)}').api.Borders(5).LineStyle = 1
# new_worksheet.range(f'A4:W{len(all_data)}').api.Borders(5).Weight = 3
# Borders(6) 单元格内从左下角 到 右上角。
# Borders(7) 左边框,LineStyle = 2 虚线。
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(7).LineStyle = 1
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(7).Weight = 3
# Borders(8) 顶部框,LineStyle = 5 双点划线。
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(8).LineStyle = 1
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(8).Weight = 3
# Borders(9) 底部边框,LineStyle = 1 直线。
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(9).LineStyle = 1
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(9).Weight = 3
# Borders(10) 右边框,LineStyle = 4 点划线。
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(10).LineStyle = 1
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(10).Weight = 3
# Borders(11) 内部垂直边线。
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(11).LineStyle = 1
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(11).Weight = 3
# Borders(12) 内部水平边线。
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(12).LineStyle = 1
new_worksheet.range(f'A4:W{len(all_data) + 5}').api.Borders(12).Weight = 3
# 参数若设置为'rows'或‘r’,表示自动适应调整行高;若设置为'columns'或'c',表示自动适应调整列宽
new_worksheet.autofit()
"""设置单元格大小"""
# new_workbook.autofit() # 自动调整单元格大小。注:此方法是在单元格写入内容后,再使用,才有效。
# new_workbook.range(1, 4).column_width = 5 # 设置第4列 列宽。(1,4)为第1行第4列的单元格
new_worksheet.range('A1').row_height = 180 # 设置第1行 行高
"""设置单元格 字体格式"""
new_worksheet.range('A2:A3').api.HorizontalAlignment = -4108 # -4108 水平居中。 -4131 靠左,-4152 靠右。
new_worksheet.range('A2:A3').api.VerticalAlignment = -4108 # -4108 垂直居中(默认)。 -4160 靠上,-4107 靠下, -4130 自动换行对齐。
new_worksheet.range('A2').api.Font.Name = "宋体" # 设置字体
new_worksheet.range('A2').api.Font.Size = 20 # 设置字体的大小。
new_worksheet.range('A2').api.Font.Bold = True # 设置为粗体。
# 保存工作簿
new_workbook.save(r'E:pythonExample 1汇总实验项目表.xlsx')
new_workbook.close()
print("完成合并")
app.quit()
最后
以上就是纯情白羊为你收集整理的使用Python批量合并多个工作簿中的同名工作表的全部内容,希望文章能够帮你解决使用Python批量合并多个工作簿中的同名工作表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复