在Azure中运行的EPPlus生成"GDI +中发生了一般错误"

Ind*_*dex 7 c# azure epplus

我正在使用一个控制台应用程序/ WebJob,它利用EPPlus库来处理Excel文件(.xlsx).我的应用程序基本上打开一组工作簿并将它们合并为一个文件.

应用程序在本地运行正常,但在Azure中运行不正常.根据StackTrace在尝试保存图像时在EEPlus库中发生的错误(我假设这样做是为了将图像从一个工作簿移动到另一个工作簿).

Unhandled Exception: System.ApplicationException: A generic error occurred in GDI+.
---> System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
at System.Drawing.Image.Save(Stream stream, ImageCodecInfo encoder, EncoderParameters encoderParams)
at System.Drawing.Image.Save(Stream stream, ImageFormat format)
at OfficeOpenXml.Drawing.ExcelPicture..ctor(ExcelDrawings drawings, XmlNode node)
at OfficeOpenXml.Drawing.ExcelDrawing.GetDrawing(ExcelDrawings drawings, XmlNode node)
at OfficeOpenXml.Drawing.ExcelDrawings.AddDrawings()
at OfficeOpenXml.Drawing.ExcelDrawings..ctor(ExcelPackage xlPackage, ExcelWorksheet sheet)
at OfficeOpenXml.ExcelWorksheets.Add(String Name, ExcelWorksheet Copy)
Run Code Online (Sandbox Code Playgroud)

原始代码,它产生错误打开调用ConvertTo.

Part = drawings.Part.Package.GetPart(UriPic);
FileInfo f = new FileInfo(UriPic.OriginalString);
ContentType = GetContentType(f.Extension);
_image = Image.FromStream(Part.GetStream());
ImageConverter ic=new ImageConverter();
var iby=(byte[])ic.ConvertTo(_image, typeof(byte[]));
var ii = _drawings._package.LoadImage(iby, UriPic, Part);
ImageHash = ii.Hash;
Run Code Online (Sandbox Code Playgroud)

在阅读了有关此事的几个问题之后,我尝试使用手动转换修改它并保存到MemoryStream.但是我仍然得到错误.

Part = drawings.Part.Package.GetPart(UriPic);
FileInfo f = new FileInfo(UriPic.OriginalString);
ContentType = GetContentType(f.Extension);
_image = Image.FromStream(Part.GetStream());

byte[] iby;
using (MemoryStream ms = new MemoryStream())
{
    _image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
    iby = ms.ToArray();                
}

var ii = _drawings._package.LoadImage(iby, UriPic, Part);
ImageHash = ii.Hash;
Run Code Online (Sandbox Code Playgroud)

我真的不知道接下来会尝试什么.这个例外不会产生那么多,我觉得我已经尝试了所有的建议:检查文件夹和文件权限(我的应用程序使用临时文件夹,我认为是安全的),避免重用流和等等.

如果您需要任何其他信息,请告诉我,我很乐意提出.

spo*_*rts 0

我通常这样使用 EPPlus:

  1. 获取我之前已格式化的 template.xlsx
  2. 向其中添加数据(使用 C# 和 EPPlus)
  3. 将新的 xlsx 返回给用户

我最近遇到了同样的错误:

GDI+ 中发生一般错误

是如何解决的:

我的template.xlsx使用 Excel 的相机工具:也就是说,其中一张工作表中有一个快照正在粘贴到另一张工作表中。

这在本地(在我的计算机中)运行良好,但在 Azure 中则不然......我不知道为什么。

但如果我删除快照它就会起作用