wyy81061 发表于 2024-11-19 14:45

帮忙用Python或者VBA 写个小工具

小工具主要是想实现批量给EXCEL放置图片,这个模版文件是我批量生成的有很多个,如模版1、模版2...模板50等等,对应的图片文件夹也命名为模版1、模版2...模板50等等
1、批量导入图片:工作表B 单元格内的数字序号是和需要导入的图片一一对应的,图片已经提前命名过,后期不一定用数字序号,也可能是别的文字。模版是35张照片,实际使用可能就10几张。导入照片后,将单元格内的内容“1-35”全部删除;
2、将工作表A 的I2:I12区域内容复制到 工作表B的的文本框 TextBox 63 里(“TextBox 63”是文本框在excel里的对象名称);
3、将复制内容后的文本框 TextBox 63 放到 工作表B 的图片之上当作水印使用,注意有图片的单元格才需要水印,其余空白单元格不需要文本框;

4、将工作表A 的 “A1:G19”区域截图,截图后的图片盖在原区域,并将 “I2:I12” 区域的内容删除。
批量传照片https://wwwv.lanzn.com/iZWF02fii1yj

aimy1024227 发表于 2024-11-19 17:32

https://www.52pojie.cn/thread-1983298-1-1.html   看看这个

wyy81061 发表于 2024-11-20 08:24

aimy1024227 发表于 2024-11-19 17:32
https://www.52pojie.cn/thread-1983298-1-1.html   看看这个

这个我看了,其实批量传图片我已经写好了,只是其余的功能不行,现在是用好几个工具凑合用,想要一个整合的

lhz930 发表于 2024-11-20 14:03

以下是一个 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
            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(.value for i in range(2, 13) if ws_a.value])
      if textbox_content:
            for row in ws_b.iter_rows(min_col=2, max_col=2):
                if ws_b.row}"].value:# 判断是否有图片
                  img_path = os.path.join(template_path, f"{row.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.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生成的代码,可能会不好用

Dmark 发表于 2024-11-20 14:11

上面都有人用AI回答了,你自己试试
看起来简单
免费AI可以解决的

luxingyu329 发表于 2024-11-21 16:49

https://img.picgo.net/2024/11/21/03157638fc02b58e8fd525d74f6e5c00fd3b3882360a2328.jpg

这是两个一样的还是写错了,连续的?

luxingyu329 发表于 2024-11-21 20:41

https://img.picgo.net/2024/11/21/5d519350a08d9675fd8d0126298dab1cf37802cd0e19296d.gif

https://luxingyu329.lanzoue.com/i8rAI2frw9pg    没有写批量,只写了个单元文件处理

wyy81061 发表于 2024-11-22 09:29

luxingyu329 发表于 2024-11-21 20:41
https://luxingyu329.lanzoue.com/i8rAI2frw9pg    没有写批量,只写了个单元文件处理

这就是我要的效果,不过有2个问题,一个就是没有批量生成,这点非常重要;第二个就是生成的文件名称不对,应该是和模版文件一样的名称,毕竟要处理的文件太多了。看了下你发的打包,里面好像没有你那个程序

wyy81061 发表于 2024-11-22 09:44

luxingyu329 发表于 2024-11-21 16:49
这是两个一样的还是写错了,连续的?

写错了,后面2个是对的,前面2个可以忽略,不过无所谓,因为后期我图片数量本身就不是固定的

tantanxin147 发表于 2024-11-24 00:30

这样行吗?改的头疼。
https://s3.bmp.ovh/imgs/2024/11/24/665744a69d55ad6f.png修改的示例:https://wwwj.lanzouw.com/i15T72g11cve
页: [1]
查看完整版本: 帮忙用Python或者VBA 写个小工具