`from openpyxl.drawing.image import Image` 是用于在使用 `openpyxl` 库操作 Excel 文件时
from openpyxl.drawing.image import Image是用于在使用openpyxl库操作 Excel 文件时向工作表中插入图片的导入语句。注意该Image类并非用于图像处理如 PIL/Pillow而是专用于将图片如 PNG、JPG 等嵌入到 Excel 工作表中的对象。使用前需确保已安装openpyxl且图片文件路径有效。基本用法示例fromopenpyxlimportWorkbookfromopenpyxl.drawing.imageimportImage wbWorkbook()wswb.active# 创建 Image 对象路径需为本地绝对或相对路径imgImage(example.png)img.anchorA1# 设置图片锚定单元格左上角位置ws.add_image(img)wb.save(with_image.xlsx)⚠️ 注意事项openpyxl不支持直接从 URL 加载图片必须是本地文件图片格式建议使用 PNG兼容性最好JPG 也可用但需确保无透明通道问题Image对象不支持缩放、裁剪等编辑操作仅支持定位与尺寸微调通过width/height属性间接影响但实际以原始像素为准Excel 中可能自动适配插入图片后保存的 Excel 文件需用 Excel 或兼容软件打开才能正常显示部分在线表格工具可能不渲染图片。在openpyxl中调整插入图片的大小和位置需结合Image对象属性与工作表单元格锚定机制但需注意openpyxl.drawing.image.Image本身不直接提供width/height设置接口这些属性被忽略实际尺寸由图片原始像素和 Excel 的缩放逻辑决定。不过可通过以下可靠方式实现精准控制✅ 1. 调整位置锚定单元格 偏移使用anchor属性指定图片左上角锚定的单元格如B3再通过offset微调像素级偏移fromopenpyxl.drawing.imageimportImage imgImage(logo.png)img.anchorB3# 锚定到 B3 单元格左上角img.offset(10,5)# 向右偏移 10px向下偏移 5px相对于 B3 左上角ws.add_image(img)⚠️offset单位为像素且仅在保存后由 Excel 渲染时生效。✅ 2. 调整大小核心方法修改图片原始尺寸或利用 Excel 单元格行列高宽由于openpyxl不支持运行时缩放图片推荐两种实践方案▪ 方案 A预处理图片推荐 ✅用 PillowPIL提前缩放图片再插入fromPILimportImageasPilImagefromopenpyxl.drawing.imageimportImageasOpenpyxlImage# 缩放原图至目标尺寸例如 200×100 像素pil_imgPilImage.open(logo.png)pil_imgpil_img.resize((200,100),PilImage.Resampling.LANCZOS)pil_img.save(logo_resized.png)# 保存临时缩放图imgOpenpyxlImage(logo_resized.png)img.anchorB3ws.add_image(img)▪ 方案 B匹配 Excel 行高列宽间接控制显示大小Excel 中图片会按比例适应其覆盖的单元格区域。可手动设置行列尺寸使图片“视觉上”缩放# 设置 B3 所在行高单位磅和列宽单位字符宽度ws.row_dimensions[3].height60# 第3行高 ≈ 60 磅约80像素ws.column_dimensions[B].width20# B列宽 ≈ 20 字符约150像素# 再插入图片并锚定到 B3Excel 会自动按单元格比例缩放显示 提示openpyxl的column_dimensions.width和row_dimensions.height可精确控制是间接调控图片显示尺寸的有效手段。❌ 不起作用的方式常见误区img.width 200或img.height 100→无效Image类无此可写属性img.scale_x 0.5→不存在该属性openpyxl当前版本3.1不支持运行时缩放。✅ 进阶动态计算锚点以居中/对齐# 将图片居中于单元格区域 C5:E10start_row,end_row5,10start_col,end_col3,5# C3, E5# 计算中心单元格取整center_row(start_rowend_row)//2center_colget_column_letter((start_colend_col)//2)# 需 from openpyxl.utils import get_column_letterimg.anchorf{center_col}{center_row}