You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#基于EPPlus插入图片到Excel单元格时高度拉伸如何解决

EPPlus插入Excel图片拉伸变形问题解决

错误原因

代码中的问题主要有3点:

  1. 强制设置固定宽高未保持原图比例:调用pic.SetSize(316, 60)时同时传入了宽高参数,会直接将图片强制拉伸到指定尺寸,忽略原图的宽高比,直接导致变形。
  2. 单元格尺寸与图片尺寸不匹配:设置的第一行行高为46.61磅,但指定的图片高度为60像素,尺寸不匹配时EPPlus会自动调整图片显示规则,进一步加重拉伸问题。
  3. 未处理单位换算差异:Excel中行高单位为磅,列宽单位为字符数,和图片的像素单位存在换算关系,直接混用数值会导致尺寸计算偏差。

修复方案

修改逻辑为优先保持原图宽高比,再根据目标单元格尺寸适配,修改后代码如下:

imgCompanyLogo = Image.FromFile(@"C:\Users\tridip\Desktop\Test1\www_files\image002.png");
// 计算原图宽高比
double imgAspectRatio = (double)imgCompanyLogo.Width / imgCompanyLogo.Height;
// 设置B1单元格尺寸
ws.Column(2).Width = 45.11;
ws.Row(1).Height = 46.61;
ExcelPicture pic = ws.Drawings.AddPicture("Logo", imgCompanyLogo);
pic.SetPosition(0, 0, 1, 0);
// 按单元格高度适配图片,宽度自动按比例计算,避免拉伸
int targetHeight = (int)(ws.Row(1).Height * 96 / 72); // 磅转像素,96为默认屏幕DPI
int targetWidth = (int)(targetHeight * imgAspectRatio);
pic.SetSize(targetWidth, targetHeight);
// 可选:配置图片随单元格调整规则,避免后续调整单元格时变形
pic.EditAs = eEditAs.OneCell;

额外注意事项

  • 如果只需要固定宽度,也可以仅指定宽度参数调用SetSize,高度会自动按比例计算:pic.SetSize(316)
  • 如果原图DPI不是96,需要把换算公式中的96替换为原图实际DPI数值,避免尺寸偏差。

内容的提问来源于stack exchange,提问作者user15940620

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 11:06:03