EPPlus Excel AddPicture 错误“列号超出界限”

本文关键字:出界 界限 Excel AddPicture 错误 EPPlus | 更新日期: 2023-09-27 18:32:19

我有以下代码:

带有"excelImage"初始化的行会引发异常:列号超出界限。问题的解决方案是什么?

var range2 = worksheet.Cells ["A" + limiter.ToString ()];
range2.Value = tokenGood.id; //Take from JSON-array
worksheet.Row (limiter).Height = 70; //'limiter' is like row iterator
worksheet.Column (1).Width = 10;
Bitmap img = new Bitmap(Image.FromFile (PIC_FILENAME));
OfficeOpenXml.Drawing.ExcelPicture excelImage = worksheet.Drawings.AddPicture ("random_string", img); //Error Line
excelImage.From.Column = 3;
excelImage.From.Row = limiter;
excelImage.SetSize (60, 60);

EPPlus Excel AddPicture 错误“列号超出界限”

该错误的解决方法(EPPlus 4.5.3 不检查图像分辨率是否存在于:ExcelDrawing.cs,内部空隙 SetPixelWidth(int pixels, float dpi), line 400)。

如果未设置图像分辨率,只需手动设置即可。添加图片将正常工作:

if (img.HorizontalResolution == 0 || img.VerticalResolution == 0)
   img.SetResolution(96, 96);                                       
var excelImage = worksheet.Drawings.AddPicture("img", img);

似乎是当前(4.0.5)EPPlus中的一个错误。尽管当前版本最近已发布,但 CodePlex 上积压的未决问题数量巨大,所以我没有看到任何接近固定版本......

我通过下载源代码,手动更正EPPlus/Drawing/ExcelDrawingBase中的4行.cs并重新编译来解决它。

行是 513, 515(均为SetPixelHeight(int, float))和 540, 542(SetPixelWitdh(int, float))。

我将这两行中From.ColumnFrom.Row的出现次数更改为 Math.Max(From.Column, 0)Math.Max(From.Row, 0)

这里的问题是 From 属性是一个以某种方式未正确初始化的对象,因此 From.RowFrom.Column 的值设置为 int.MinValue - 正如您可能猜到的那样,这不是有效的列/行索引。

我一直在寻找不需要编辑源代码的解决方法,但找不到任何解决方法:希望这有帮助。