好友
阅读权限10
听众
最后登录1970-1-1
|
以下是一个 Python 脚本,使用 openpyxl 和 Pillow 等库实现您的需求。该脚本将分步骤完成您描述的操作:
安装必要的库
运行以下命令安装所需的 Python 库:
pip install openpyxl pillow
脚本代码
import os
from openpyxl import load_workbook
from openpyxl.drawing.image import Image
from PIL import Image as PILImage
from PIL import ImageDraw, ImageFont
def process_excel(template_dir, output_dir):
# 遍历模板文件夹
for template_name in os.listdir(template_dir):
template_path = os.path.join(template_dir, template_name)
if not os.path.isdir(template_path):
continue
# 加载 Excel 文件
excel_file = os.path.join(template_path, f"{template_name}.xlsx")
if not os.path.exists(excel_file):
print(f"未找到文件:{excel_file}")
continue
wb = load_workbook(excel_file)
ws_a = wb['A']
ws_b = wb['B']
# 1. 批量导入图片
for row in ws_b.iter_rows(min_col=2, max_col=2):
cell = row[0]
if cell.value:
img_name = f"{cell.value}.jpg"
img_path = os.path.join(template_path, img_name)
if os.path.exists(img_path):
img = Image(img_path)
ws_b.add_image(img, f"B{cell.row}")
cell.value = None # 清空单元格内容
# 2. 将工作表A的内容复制到文本框
textbox_content = "\n".join([ws_a[f"I{i}"].value for i in range(2, 13) if ws_a[f"I{i}"].value])
if textbox_content:
for row in ws_b.iter_rows(min_col=2, max_col=2):
if ws_b[f"B{row[0].row}"].value: # 判断是否有图片
img_path = os.path.join(template_path, f"{row[0].value}.jpg")
add_watermark(img_path, textbox_content)
# 3. 截图工作表A指定区域
screenshot_area = (0, 0, 700, 300) # 假定截图区域,具体区域需要根据实际情况调整
screenshot_path = os.path.join(output_dir, f"{template_name}_screenshot.png")
create_screenshot(ws_a, screenshot_area, screenshot_path)
# 删除 I2:I12 区域内容
for i in range(2, 13):
ws_a[f"I{i}"].value = None
# 保存处理后的文件
output_file = os.path.join(output_dir, f"{template_name}_processed.xlsx")
wb.save(output_file)
print(f"已处理并保存:{output_file}")
def add_watermark(img_path, text):
"""在图片上添加水印"""
if not os.path.exists(img_path):
return
with PILImage.open(img_path) as img:
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", size=20) # 调整字体和大小
text_width, text_height = draw.textsize(text, font=font)
position = (img.width - text_width - 10, img.height - text_height - 10)
draw.text(position, text, fill="white", font=font)
img.save(img_path)
def create_screenshot(ws, area, output_path):
"""对工作表区域截图(需结合外部工具实现)"""
pass # 实现方法需要具体配合截图工具,如 pyautogui 或类似工具
if __name__ == "__main__":
template_directory = "模版文件夹路径"
output_directory = "输出文件夹路径"
os.makedirs(output_directory, exist_ok=True)
process_excel(template_directory, output_directory)
脚本说明
1.批量导入图片:通过 openpyxl 的 add_image 方法将图片插入到指定单元格。
2.添加水印:使用 Pillow 库,在图片上叠加水印文本。
3.截图功能:create_screenshot 方法需要结合具体截图工具实现(例如 pyautogui)。
4.内容清理:清空指定单元格区域的内容。
注意事项
1.字体:确保您的系统中有 arial.ttf 字体文件,或调整路径。
2.图片尺寸:导入的图片会按照默认大小插入,如果需要调整图片大小,可使用 Pillow 修改。
3.截图功能:目前脚本中 create_screenshot 方法留空,您可以根据需要补充实现。
注:用chatgpt生成的代码,可能会不好用 |
|