EPPlus插入单元格图片时长宽比适配及参数取值咨询
问题1:四个行列参数的取值逻辑
这四个参数用来划定你希望图片适配的目标单元格矩形区域边界:
firstRow、lastRow:目标区域的起始行号、结束行号,行号和Excel界面显示的行号一致,从1开始计数firstColumn、lastColumn:目标区域的起始列号、结束列号,列号同样从1开始计数(比如A列对应1、B列对应2)
比如你需求是将图片插入B1单元格,那四个参数的取值就是firstRow=1、lastRow=1、firstColumn=2、lastColumn=2;如果需要让图片适配B1到D3的跨列跨行区域,就对应调整为firstRow=1、lastRow=3、firstColumn=2、lastColumn=4。
代码会先计算你指定的这个矩形区域的总像素宽高和宽高比,再把图片等比缩放后居中放在该区域内,不会超出区域边界。
问题2:两种参数获取方案对比
方案二不可用
方案二的逻辑存在明显缺陷:
- 仅获取
Dimension.Rows和Dimension.Columns只能拿到工作表已使用区域的总行数、总列数,拿不到区域的起始行、起始列号,如果已使用区域不是从A1开始的,完全无法定位目标区域 worksheet.Dimension.Address.Last()的逻辑完全错误:Address是类似A1:C5的地址字符串,Last()取的是字符串最后一个字符,根本无法获取有效行列坐标。
方案一合理
方案一的取值逻辑是正确的:worksheet.Dimension.Start对应已使用区域的左上角单元格,worksheet.Dimension.End对应已使用区域的右下角单元格,直接读取对应的Row、Column属性就能拿到完整的四个边界参数。
注意:该方案仅适用于你需要把图片适配到整个工作表已使用区域的场景,如果你的需求是把图片插入指定单元格(比如B1),不需要调用
Dimension,直接给四个参数传固定值即可。
方案一的正确使用示例:
var start = workSheet.Dimension.Start; var end = workSheet.Dimension.End; int firstRow = start.Row; int lastRow = end.Row; int firstColumn = start.Column; int lastColumn = end.Column;
问题3:defaultOffsetPixels参数取值
这个参数是自定义的样式参数,不需要复杂计算,它用来定义图片和目标区域边框之间的留白像素值:
- 如果你需要图片完全贴紧目标区域边框,直接传0即可
- 如果需要留空隙避免图片和单元格边框重叠,根据视觉需求传2~10之间的整数即可,常用值为2、5
内容的提问来源于stack exchange,提问作者user15940620
相关产品推荐
相关产品推荐

