大家好,这里是办公智能体广场,在日常办公中,我们经常会遇到一批 Excel 表格内容已经整理完成,但格式杂乱、样式不统一的情况。人工逐个套用模板不仅耗时,还容易出错。
本文将介绍 Excel 批量套用格式模板的常见方法,并重点说明如何借助本地工具,把模板样式一键应用到目标表格中,快速完成标准化输出。
一、需求分析
有一批Excel文件需要批量调整成如下复杂的格式:
- 纸张大小 :A4
- 打印方向 :横向
- 缩放方式 :宽度 1 页,高度自动分页
- 打印区域 : A1:H31
- 打印标题行 :第 1 行
- 页边距 :左 0.3 英寸,右 0.3 英寸,上 0.5 英寸,下 0.5 英寸
- 水平居中打印 :开启
- 页眉 : 打印格式模板
- 页脚 :左侧打印时间,右侧页码
- 冻结窗格 :冻结第 1 行
- 列宽 :A-H 列已预设
- 行高 :第 1 行为表头行高,其余为正文行高
- 表头样式 :加粗、居中、浅蓝底色、黑色边框
- 正文样式 :微软雅黑 10 号、自动换行、垂直居中、浅灰边框
这要是手动调整都要调整很久,况且如果还有100多个excel都需要这么调整,那简直要崩溃!!!今天我将介绍几种实现方案,完美解决这个问题。
二、实现方案一:小白上手
先给大家介绍两种零基础小白也能轻松上手的方案:
- 离线断网的模板套用法。
- Excel AI自动化的提示词描述法。
1.1 离线模板方案
这个方案可以断网使用,但是先需要根据样式的需求设置好一个模板excel, 打印设置我已经设置好了, 制作好的模板如下:
打开鲸闲办公智能体广场,找到 “样式修改器”,如图:
获取: 宫中&浩气: “老罗软件”。 然后将待调整的excel文件和模板文件输入,点击 “执行” 就可以了,如图:
这个不会改变excel的原始数据,只会根据模板文件调整样式,请放心使用。
1.2 Excel AI自动化方案
这个不需要自己做模板,是极其懒惰的一种方案,打开鲸闲办公智能体广场,找到 “Excel自动化”,如图:
然后将输入文件和提示词输入就可以了,如图:
智能体会自动规划任务完成所有的任务,这就是AI的强大性。
三、实现方案二:Python脚本
用 Python 来批量处理 Excel,其实也是个很不错的选择,尤其适合那些经常要统一表格样式、批量套用打印格式的朋友。
优势:
- 可以批量处理大量 Excel 文件,效率很高
- 能把打印设置、页眉页脚、冻结窗格、行高列宽、单元格样式统一套用
- 逻辑可定制,后续想改规则也比较方便
- 免费开源,无需额外购买软件
- 支持断网运行,数据始终保存在本地,更安全
劣势:
- 需要一定的 Python 基础
- 第一次使用需要安装依赖库
- 如果格式要求非常复杂,脚本调试会花一些时间
这里我给大家分享一个简单的 Python 脚本,可以把模板 Excel 的格式批量应用到目标 Excel 文件中:
import os
from copy import copy
from openpyxl import load_workbook
# 模板 Excel 路径
template_path = r"path\to\your\template.xlsx"
# 待处理 Excel 文件夹
input_folder = r"path\to\your\excel_files"
# 输出文件夹
output_folder = r"path\to\your\output\folder"
# 如果输出文件夹不存在则创建
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 读取模板工作簿
template_wb = load_workbook(template_path)
template_ws = template_wb.active
def copy_page_setup(src_ws, dst_ws):
"""复制页面设置、打印设置、页眉页脚、冻结窗格"""
dst_ws.freeze_panes = src_ws.freeze_panes
dst_ws.print_area = src_ws.print_area
dst_ws.print_title_rows = src_ws.print_title_rows
dst_ws.print_title_cols = src_ws.print_title_cols
dst_ws.page_setup.paperSize = src_ws.page_setup.paperSize
dst_ws.page_setup.orientation = src_ws.page_setup.orientation
dst_ws.page_setup.fitToWidth = src_ws.page_setup.fitToWidth
dst_ws.page_setup.fitToHeight = src_ws.page_setup.fitToHeight
dst_ws.page_setup.scale = src_ws.page_setup.scale
dst_ws.page_margins.left = src_ws.page_margins.left
dst_ws.page_margins.right = src_ws.page_margins.right
dst_ws.page_margins.top = src_ws.page_margins.top
dst_ws.page_margins.bottom = src_ws.page_margins.bottom
dst_ws.page_margins.header = src_ws.page_margins.header
dst_ws.page_margins.footer = src_ws.page_margins.footer
dst_ws.print_options.horizontalCentered = src_ws.print_options.horizontalCentered
dst_ws.print_options.verticalCentered = src_ws.print_options.verticalCentered
dst_ws.oddHeader.left.text = src_ws.oddHeader.left.text
dst_ws.oddHeader.center.text = src_ws.oddHeader.center.text
dst_ws.oddHeader.right.text = src_ws.oddHeader.right.text
dst_ws.oddFooter.left.text = src_ws.oddFooter.left.text
dst_ws.oddFooter.center.text = src_ws.oddFooter.center.text
dst_ws.oddFooter.right.text = src_ws.oddFooter.right.text
def copy_dimensions(src_ws, dst_ws):
"""复制列宽和行高"""
for col_letter, src_dim in src_ws.column_dimensions.items():
dst_dim = dst_ws.column_dimensions[col_letter]
dst_dim.width = src_dim.width
dst_dim.hidden = src_dim.hidden
dst_dim.bestFit = src_dim.bestFit
dst_dim.outlineLevel = src_dim.outlineLevel
dst_dim.collapsed = src_dim.collapsed
for row_index, src_dim in src_ws.row_dimensions.items():
dst_dim = dst_ws.row_dimensions[row_index]
dst_dim.height = src_dim.height
dst_dim.hidden = src_dim.hidden
dst_dim.outlineLevel = src_dim.outlineLevel
dst_dim.collapsed = src_dim.collapsed
def copy_cell_styles(src_ws, dst_ws):
"""复制单元格样式,不覆盖目标单元格原始数据"""
for row in src_ws.iter_rows(
min_row=1,
max_row=src_ws.max_row,
min_col=1,
max_col=src_ws.max_column
):
for src_cell in row:
dst_cell = dst_ws[src_cell.coordinate]
if src_cell.has_style:
dst_cell._style = copy(src_cell._style)
if src_cell.number_format:
dst_cell.number_format = src_cell.number_format
if src_cell.alignment:
dst_cell.alignment = copy(src_cell.alignment)
if src_cell.font:
dst_cell.font = copy(src_cell.font)
if src_cell.fill:
dst_cell.fill = copy(src_cell.fill)
if src_cell.border:
dst_cell.border = copy(src_cell.border)
if src_cell.protection:
dst_cell.protection = copy(src_cell.protection)
# 获取文件夹中所有 Excel 文件
excel_files = [
f for f in os.listdir(input_folder)
if f.lower().endswith(".xlsx") and not f.startswith("~$")
]
# 遍历所有 Excel 文件并套用模板格式
for file_name in excel_files:
try:
input_path = os.path.join(input_folder, file_name)
# 跳过模板文件自身
if os.path.abspath(input_path) == os.path.abspath(template_path):
continue
output_path = os.path.join(output_folder, f"formatted_{file_name}")
wb = load_workbook(input_path)
ws = wb.active
# 套用模板中的页面设置、列宽行高和单元格样式
copy_page_setup(template_ws, ws)
copy_dimensions(template_ws, ws)
copy_cell_styles(template_ws, ws)
wb.save(output_path)
print(f"已处理:{file_name}")
except Exception as e:
print(f"处理失败:{file_name},错误:{e}")
print("所有文件处理完成!")
使用时,先准备一个已设置好格式的模板 Excel,再将待处理文件放入同一文件夹,修改脚本中的模板路径、输入路径和输出路径后运行,即可批量生成格式统一的新文件。
脚本不会修改原始文件,只会在输出目录生成新的 Excel,适合批量统一报表、台账、明细表格式。
不过,Python 脚本更适合有一定编程基础的用户;如果只是偶尔处理,或希望操作更省心,那么前面的离线模板方案和 Excel AI 自动化方案会更方便。
四、总结
面对大量 Excel 格式统一的需求,手动逐个调整不仅效率低,还很容易出错。无论是离线模板套用、Excel AI 自动化,还是 Python 脚本,本质上都是用工具替代重复劳动。想省心省事,可以直接用离线模板方案;想通过文字描述需求完成格式整理,可以用 Excel AI 自动化;如果需要更强的批量处理和自定义能力,也可以选择 Python 脚本。选对方法之后,原本繁琐的格式整理工作,就能更快、更规范地完成。