EPPlus Excel AddPicture错误'列号超出范围'

时间:2016-01-27 16:12:02

标签: c# excel epplus

我有以下代码:

带有'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);

2 个答案:

答案 0 :(得分:1)

错误的解决方法(EPPlus 4.5.3不会检查图像分辨率是否存在于:ExcelDrawing.cs, 内部void SetPixelWidth(int pixel,float dpi),第400行)。

如果未设置图像分辨率,只需手动设置即可。 AddPicture可以正常工作:

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

答案 1 :(得分:0)

这似乎是当前(4.0.5)EPPlus中的一个错误。即使最近发布了当前版本,CodePlex上的未解决问题仍然很多,所以我看不到任何即将发布的固定版本......

我通过下载源解决了这个问题,手动纠正了EPPlus / Drawing / ExcelDrawingBase.cs中的4行并重新编译。

行为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 - 您可能猜测它不是有效的列/行索引。

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