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 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.Column
或From.Row
的出现次数更改为 Math.Max(From.Column, 0)
和 Math.Max(From.Row, 0)
。
这里的问题是 From
属性是一个以某种方式未正确初始化的对象,因此 From.Row
和 From.Column
的值设置为 int.MinValue
- 正如您可能猜到的那样,这不是有效的列/行索引。
我一直在寻找不需要编辑源代码的解决方法,但找不到任何解决方法:希望这有帮助。