2017-03-03 66 views
2

我已經有這個工作,但它已經停了,我無法弄清楚爲什麼。我使用EPPlus.Core v1.3導入一個簡單的excel文件。下面是我使用的代碼:Asp.net核心導入Excel文件FileNotFoundException

public async Task<IActionResult> Import(IFormFile file) 
    { 
     //Get file 
     var newfile = new FileInfo(file.FileName); 
     var fileExtension = newfile.Extension; 

     //Check if file is an Excel File 
     if (fileExtension.Contains(".xls")) 
     { 
      //Create an excel package 
      using (var package = new ExcelPackage(newfile)) 
      { 
       //Get the first worksheet in the file 
       var worksheet = package.Workbook.Worksheets[1]; 
... 

的VAR工作表行拋出一個錯誤

「IndexOutOfRangeException:工作表位置超出範圍」

然而,當我看包變量I看到此錯誤

「長度= 'package.File.Length' 扔 類型 'System.IO.FileNotFoundException' 的異常」

我在這裏錯過了什麼?就像我說的,這用於工作,我想不出任何我改變的與此代碼相關的問題。

+0

對我來說,看起來你正在上傳一個文件,通過'FileInfo'對象獲取文件名,然後將'FileInfo'實例傳遞給'ExcelPackage'。在嘗試加載打開文件之前,您應該將文件保存到某個文件夾中。 –

+0

我試圖避免保存到服務器,如果我不必。這些文件非常小,所以我希望將它們加載到內存和進程中。 – Wyatt

+2

那麼你需要傳遞一個流到'ExcelPackage'而不是FileInfo。 '新的ExcelPackage(file.OpenReadStream())'可能會做到這一點,雖然我沒有看過幾個版本的'IFormFile',所以名字可能會有所不同。但你明白了。 –

回答

0

它也是一樣的文件嗎?它看起來像文件可能沒有兩個工作表,並且因爲索引是1,它正在尋找第二個工作表。

+0

這是相同的文件,我也試過package.Workbook.Worksheets.First()和Worksheets [0]。既沒有工作。 – Wyatt

0

您需要將文件加載到MemoryStream中,然後從那裏創建ExcelPackage

using (MemoryStream ms = new MemoryStream(FileUpload1.FileBytes)) 
using (ExcelPackage excelPackage = new ExcelPackage(ms)) 
{ 
    //work with the excel document 
} 

FileUpload1.FileBytes如果asp.net web表單,但我猜核心具有類似的東西。