把要合并的工作簿放到一个文件夹内,把这个Python代码也复制保存到同一文件夹内运行即可。
openpyxl只支持xlsx文件,所以本程序不会合并xls文件(Excel 2007之前的版本)。
from openpyxl import load_workbook from openpyxl import Workbook from copy import copy from openpyxl.utils import get_column_letter import os path = os.path.dirname(__file__) dest = os.path.join('合并后.xlsx') # 复制一个单元格 def copy_cell(source_cell, target_cell): # 复制值 target_cell.value = source_cell.value # 复制格式 if source_cell.has_style: target_cell.font = copy(source_cell.font) target_cell.border = copy(source_cell.border) target_cell.fill = copy(source_cell.fill) target_cell.number_format = copy(source_cell.number_format) target_cell.protection = copy(source_cell.protection) target_cell.alignment = copy(source_cell.alignment) return 0 # 复制一张工作表 def copy_a_sheet(source_ws, target_ws): area = source_ws[source_ws.dimensions] # 复制值 for row in area: for cell in row: r = cell.row c = cell.column copy_cell(cell, target_ws.cell(r,c)) # 重设列宽 for c_index in range(source_ws.min_column,source_ws.max_column): c_name = get_column_letter(c_index) target_ws.column_dimensions[c_name].width = source_ws.column_dimensions[c_name].width return 0 if __name__ == '__main__': # 读取文件列表 fileList = [] for r,ds,fs in os.walk(path): for f in fs: if ".xlsx" not in f:continue fileList.append(os.path.join(r,f)) # 新建工作簿 combined_workbook = Workbook() combined_workbook.remove(combined_workbook['Sheet']) # 遍历文件列表 for i in range(len(fileList)): filepath = fileList[i] sheetname = filepath.split('/')[-1].split('.')[0] combined_workbook.create_sheet(sheetname) combined_worksheet = combined_workbook[sheetname] wb = load_workbook(filepath) ws = wb.active copy_a_sheet(ws, combined_worksheet) # 保存工作簿 combined_workbook.save(dest)
Comments | NOTHING