帮忙用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
https://www.52pojie.cn/thread-1983298-1-1.html 看看这个 aimy1024227 发表于 2024-11-19 17:32
https://www.52pojie.cn/thread-1983298-1-1.html 看看这个
这个我看了,其实批量传图片我已经写好了,只是其余的功能不行,现在是用好几个工具凑合用,想要一个整合的 以下是一个 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生成的代码,可能会不好用 上面都有人用AI回答了,你自己试试
看起来简单
免费AI可以解决的
https://img.picgo.net/2024/11/21/03157638fc02b58e8fd525d74f6e5c00fd3b3882360a2328.jpg
这是两个一样的还是写错了,连续的? https://img.picgo.net/2024/11/21/5d519350a08d9675fd8d0126298dab1cf37802cd0e19296d.gif
https://luxingyu329.lanzoue.com/i8rAI2frw9pg 没有写批量,只写了个单元文件处理 luxingyu329 发表于 2024-11-21 20:41
https://luxingyu329.lanzoue.com/i8rAI2frw9pg 没有写批量,只写了个单元文件处理
这就是我要的效果,不过有2个问题,一个就是没有批量生成,这点非常重要;第二个就是生成的文件名称不对,应该是和模版文件一样的名称,毕竟要处理的文件太多了。看了下你发的打包,里面好像没有你那个程序 luxingyu329 发表于 2024-11-21 16:49
这是两个一样的还是写错了,连续的?
写错了,后面2个是对的,前面2个可以忽略,不过无所谓,因为后期我图片数量本身就不是固定的 这样行吗?改的头疼。
https://s3.bmp.ovh/imgs/2024/11/24/665744a69d55ad6f.png修改的示例:https://wwwj.lanzouw.com/i15T72g11cve
页:
[1]