使用AddPicture时出现EPPlus Excel错误

时间:2014-10-17 04:56:59

标签: c# excel asp.net-mvc-4 epplus

我一直试图找到这个问题的解决方案这么多个小时我真的很累,我希望有人能指出我,我很想念。我将尝试尽可能清楚地掌握所有可能的信息,以免产生混淆。

我正在使用EPPlus 3.1.3.0,Visual Studio 2010,C#,MVC.NET Framework 4.0和MS Excel 2007

我只是想做一件简单的事情:下载带有图片的Excel文件。没有别的。

我有一个打开excel文件的操作,用数据填充它并添加一个代码如下所示的图片:

public ActionResult FillExcelFile(string imagePath)
{
    FileInfo template = new FileInfo([path_of_excel_file]);

    ExcelPackage xls = new ExcelPackage(template);
    ExcelWorksheet worksheet = xls.Workbook.Worksheets["Sheet1"];

    worksheet.Cells[1, 1].Value = "data1";
    worksheet.Cells[1, 2].Value = "data2";
    worksheet.Cells[1, 3].Value = "data3";

    /* ToDo: add picture */

    return File(xls.GetAsByteArray(), "application/vnd.ms-excel", "excel.xlsx"));
}

此刻一切都很棒!该文件包含信息,我可以完全下载并打开它。

现在我将添加我想要的图片,我将使用下一个代码更改ToDo部分:

Image img = Image.FromFile(imagePath);
ExcelPicture pic = worksheet.Drawings.AddPicture("img", img);
pic.SetPosition(1, 1);

运行它,下载它,打开它aaand ...错误:

  

Excel在" excel.xlsx"中找到了不可读的内容。你想恢复吗?等等等等等等

当然我想恢复。

文件打开aaand ...为空,出现错误:

  

用XML错误替换了部分:/xl/worksheets/sheet1.xml部分。加载错误。线...

从现在到现在,我一直在添加不同的代码:

Image img = Image.FromFile(imagePath);
ExcelPicture pic = worksheet.Drawings.AddPicture("img", img);
pic.SetPosition(1, 1);
pic.SetSize(100, 100);

和...

Bitmap img = new Bitmap(Image.FromFile(imagePath));
ExcelPicture pic = worksheet.Drawings.AddPicture("img", img);
pic.SetPosition(1, 1);

和...

FileInfo img = new FileInfo(imagePath);
ExcelPicture pic = worksheet.Drawings.AddPicture("img", img);
pic.SetPosition(1, 1);

最后一个例外:

  

:System.ArgumentException:根据Open Packaging Conventions规范中定义的规则,部分URI无效

还有很多人喜欢用流打开图片,添加setSize,因为有人说如果你不定义某种问题,定义我自己的URI,将文件保存在服务器然后下载等等。

我非常感谢你能给我的任何帮助,真的。我不知道还有什么要检查。如果您需要更多信息,可以免费询问。

4 个答案:

答案 0 :(得分:1)

我发现了问题...或者那种。感谢@Chris引导我进入这个,并感谢@Ernie的消化。

问题是我尝试填充的模板文件内部有些东西在我尝试添加图像时无法正常工作。 @Chris说"你已经在模板中有一个绘图部分,EPPlus正在创造某种冲突"。我不知道那会是什么。

所以我从头开始创建一个新模板(我使用的模板是由其他人完成的),一切都像魅力一样。

我执行的步骤:

  • 我使用EPPlus创建了一个新文件,然后下载它就可以了。
  • 我创建了一个新的空模板并使用EPPlus添加图像并且它可以正常工作。
  • 我创建了一个新模板,其中包含我需要的所有内容,并且有效。

如果遇到类似的问题,我希望这可以帮助别人。

答案 1 :(得分:1)

我遇到了同样的问题,并注意到在添加图片之前添加背景图片时文件会被破坏。如果你之后添加背景图片它可以正常工作。

osheet.BackgroundImage.Image = My.Resources.anyimage

答案 2 :(得分:0)

我遇到了同样的问题。通过prueba prueba的回答,我分析了我的原始模板并发现:如果使用表格式化功能(请参见屏幕截图),则AddPicture会导致XML错误。我的解决方案是删除表格式。

table formatting feature

答案 3 :(得分:0)

我发现了同样的问题。我使用的是4.1.0.0版本。

我尝试使用此代码:

Bitmap arquivoLogotipo = new Bitmap(@"C:\xxxxxx.jpg");
            ExcelPicture logotipoExcel = principal.Drawings.AddPicture("logotipo", arquivoLogotipo);
            logotipoExcel.SetPosition(50, 250);

我也试过这个:

FileInfo logotipoEndereco = new FileInfo("C\okokoko.jpg");
var logotipo = principal.Drawings.AddPicture("logotipo", logotipoEndereco);
                logotipo.SetPosition(50, 250);

就我而言,我只有一张白纸。我的鳕鱼只是插入一个项目的名称和一个图像。我真的不知道发生了什么。

谢谢:D!