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

查看 64|回复 9
作者:wyy81061   
小工具主要是想实现批量给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   

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


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

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

以下是一个 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生成的代码,可能会不好用
Dmark   

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

[i]
这是两个一样的还是写错了,连续的?
luxingyu329   


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


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

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


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

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

这样行吗?改的头疼。
[i]修改的示例:https://wwwj.lanzouw.com/i15T72g11cve
您需要登录后才可以回帖 登录 | 立即注册

返回顶部