2013-07-30 41 views
2

我正在編寫一個程序,該程序必須在客戶機上創建一個excel文件,然後在保存並更新它之後,我需要再次導入並應用對我的數據庫的更改。它的導出位工作正常,但是當我從Web應用程序導入時,我的工作簿中收到零個工作表。如果我在我的開發機器上運行它,即網站與文件位於同一臺機器上運行,那麼它工作正常。使用EPPlus打開客戶端Excel文件

我的代碼如下:

try 
    { 
     Productsfile = new FileInfo(PathandFileName); 
    } 
    catch (Exception ex) 
    { 
     lblStatus.Text = string.Format("Error getting file info {0}", ex.Message); 
     return; 
    } 

    lblStatus.Text += "File Opened succesfully " + Productsfile.FullName + Environment.NewLine; 

    //Open and read file 
    try 
    { 
     using (ExcelPackage datafile = new ExcelPackage(Productsfile)) 
     { 

      ExcelWorkbook wkb = datafile.Workbook; 


      if (wkb != null) 
      { 

       lblStatus.Text += string.Format("The workbook is not null and there are {0} worksheets", wkb.Worksheets.Count) + Environment.NewLine; 

我已經證實,該代碼獲得最後一個標籤更新,還告訴我有工作簿中的零工作表,但重要的是,工作簿本身不爲空。

當我們創建使用下面的代碼的出口,該數據流從服務器傳輸到客戶端 - 我想知道如果事情扭轉它需要:

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.AddHeader("content-disposition", "attachment; filename=Products.xlsx"); 
     Response.BinaryWrite(pck.GetAsByteArray()); 
     Response.End(); 
+0

幾個問題:在第二步中上傳的文件是否是同一個文件?因爲在第一步中,用戶可以使用不同的文件名來保存到本地客戶機。然後上傳一個不同的文件...第一步導出的文件是否正確生成?也許該文件首先有空工作表。這將解釋非空的工作簿,但空工作表的情況。 –

+0

嗨,文件被創建服務器端,然後使用上面的響應代碼流式傳輸到用戶機器。然後他們選擇要上傳的文件,這是失敗的地方。從我所做的研究中可以看出,該文件被假定爲在服務器上,並從那裏打開,而該文件不存在。當文件名不存在時,ExcelPackage的默認設置是創建一個新的空白工作簿,我認爲它解釋了零工作表。 – Andrew

回答

4

權,我相信我已經找到了答案:

1)從一個文件上傳控制 2獲取文件的詳細信息)轉換這個到內存流 3)利用存儲器流

創建包和代碼是作爲如下:

if (FileUpload1.HasFile) 
     { 

      HttpPostedFile file = Request.Files[0]; 
      myLabel.Text = file.FileName; 
      MemoryStream mem = new MemoryStream(); 
      mem.SetLength((int)file.ContentLength); 

      file.InputStream.Read(mem.GetBuffer(), 0, (int)file.ContentLength); 

      ExcelPackage package = new ExcelPackage(mem); 


      ExcelWorksheet worksheet = package.Workbook.Worksheets[1]; 
      myLabel.Text += " " + worksheet.Name; 

     } 
+0

你好。任何想法,如果它可能讀取客戶端的Excel文件,而無需使用上傳控制?該文件將始終處於相同的位置。 – Safinn

+0

可以使用現代瀏覽器和IE10或更高版本。瀏覽器必須支持[FileReader https://developer.mozilla.org/en-US/docs/Web/API/FileReader] Web API。查閱[SheetJS http://sheetjs.com/]以閱讀Javascript中的Excel文件,並舉例說明。 – Suncat2000