2014-10-17 110 views
1

我一直在试图找到这么多小时的解决方案,我真的很累,我希望有人能指出我失踪。我会尽可能清楚地表达所有可能的信息,以免混淆。使用AddPicture时出现EPPlus Excel错误

我使用EPPlus 3.1.3.0,Visual Studio 2010中,C#,MVC.NET框架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")); 
} 

这时一切都很正常!该文件有信息,我可以下载并打开它没有任何问题。

现在我将添加我想要的图片,我将与下一个代码更改待办部分:

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

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

Excel found unreadable content in "excel.xlsx". Do you want to recover... blah blah blah

当然我想恢复。

文件打开AAAND ...是空的,一个错误出现:

Replaced Part: /xl/worksheets/sheet1.xml part with XML error. Load error. Line...

从这一刻开始到现在我已经加入不同的代码:

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); 

And ...

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

随着最后一个出现的例外:

: System.ArgumentException: Part URI is not valid per rules defined in the Open Packaging Conventions specification

和许多许多许多更喜欢开放的形象与流,加入的setSize因为有人说了一些这样的问题,如果你不定义它,定义我自己的URI,将文件保存在服务器中,然后下载它等。

我真的很感谢您给我的任何帮助,真的。我不知道还有什么要检查。如果您需要更多的信息请随时询问。

+1

它可能是您的内容类型?尝试“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”, – Ernie 2014-10-17 12:55:40

+0

不,@Ernie我做到了这一点,仍然无法正常工作,但感谢给我另一件事情,以检查未来:) – 2014-10-17 14:26:14

+1

你还是会得到错误if你从头开始创建文件而不是打开模板文件? – Chris 2014-10-17 15:41:15

回答

1

我发现问题...或种类。感谢@Chris引导我进入这一台,并感谢@Ernie的提示。

问题是我试图填充的模板文件里面有东西不能正常工作,当我尝试添加图像。 @Chris说:“你在模板中已经有一个绘图部分,而EPPlus正在产生某种冲突”。我不知道那会是什么。

因此,我从头开始创建一个新模板(我使用的模板是由其他人完成的),并且所有工作都像魅力一样。

的步骤,我执行:

  • 我创建了一个新的文件使用EPPlus和下载它和它的工作。
  • 我创建了一个新的空模板,并添加了EPPlus的图像,它工作。
  • 我创建了一个新的模板,包含了我需要的所有东西,并且工作正常。

我希望这可以帮助别人,如果他们有类似的问题。

0

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

table formatting feature

0

我有同样的问题,并注意到,当你添加文件被损坏的画面之前,添加背景图片。如果你以后添加背景图片,它可以正常工作。

osheet.BackgroundImage.Image = My.Resources.anyimage 
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!

相关问题