2014-10-17 244 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!