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