我正在使用一个控制台应用程序/ 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)
我真的不知道接下来会尝试什么.这个例外不会产生那么多,我觉得我已经尝试了所有的建议:检查文件夹和文件权限(我的应用程序使用临时文件夹,我认为是安全的),避免重用流和等等.
如果您需要任何其他信息,请告诉我,我很乐意提出.
我通常这样使用 EPPlus:
我最近遇到了同样的错误:
GDI+ 中发生一般错误
是如何解决的:
我的template.xlsx使用 Excel 的相机工具:也就是说,其中一张工作表中有一个快照正在粘贴到另一张工作表中。
这在本地(在我的计算机中)运行良好,但在 Azure 中则不然......我不知道为什么。
但如果我删除快照它就会起作用
| 归档时间: |
|
| 查看次数: |
1131 次 |
| 最近记录: |