2012-10-22 73 views
2

這個問題已被問了很多次,但我仍然無法找到適當的解決方案。我有兩個問題。響應後處理頁面停止.writefile

我正在創建一個excel文件,向它寫入數據,然後將其呈現給用戶進行下載。我已經使用microsoft.interop相同。

第一個問題是: 我想用一個messagebox(javascript)來顯示在用戶下載了excel之後在excel文件中生成了多少行。該消息框從不顯示,但代碼已執行。我怎樣才能做到這一點?

其次: Excel的創建後,一個EXCEL.EXE進程保持在任務管理器運行,我已經手動清理引用後還是一樣。

此警報框在文件呈現後不顯示。

excelwrkbook.SaveAs(filepath, Excel.XlFileFormat.xlWorkbookNormal, Missing.Value, Missing.Value, false, true, Excel.XlSaveAsAccessMode.xlNoChange, Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, Missing.Value, Missing.Value, true); 
     excelwrkbook.Close(0, 0, 0); 
     HttpContext.Current.Response.Clear(); 
     HttpContext.Current.Response.Buffer = true; 
     HttpContext.Current.Response.Charset = ""; 
     HttpContext.Current.Response.AddHeader("content-disposition", "attachment; filename=" + filename); 
     HttpContext.Current.Response.ContentType = "application/vnd.ms-excel"; 
     HttpContext.Current.Response.WriteFile(filepath); 
     excelApp.Quit(); 
     flag = true; 

現在終於清理代碼:

ReleaseObjects(excelrange); 
     ReleaseObjects(excelwrksheet); 
     ReleaseObjects(excelwrkbook); 
     ReleaseObjects(excelApp); 

flag = WriteDatasetToExcel(ds); 
      if (flag) 
      { 

       ClientScript.RegisterClientScriptBlock(GetType(), "Javascript", "<script>alert('Number of rows generated : " + ds.Tables[0].Rows.Count + "')</script>"); 
      } 

相關的代碼寫入數據,保存和渲染這樣做後給予

excelApp = new Excel.Application(); 
     excelwrkbook = excelApp.Workbooks.Add(1); 
     excelwrksheet = (Excel.Worksheet)excelwrkbook.Sheets[1]; 
     excelwrksheet.Name = "Application Data"; 

the re leaseobjects功能如下:

所有的
private void ReleaseObjects(Object obj) 
{ 
    if (obj != null && Marshal.IsComObject(obj)) 
    { 
     while (System.Runtime.InteropServices.Marshal.ReleaseComObject(obj) != 0) { } 

    } 
} 

回答

1

首先讓我告訴你,在與Microsoft Excel互操作一個基於Web的環境中工作效率不高。

我通常使用openXML方法來滿足這個需求。 here

關於第一個問題: 您的響應內容類型是application/vnd.ms - Excel中,因此瀏覽器將不會從該內容執行任何Java腳本。您必須確定已經下載了excel或進行事先調用以獲取行並將結果返回給java腳本或任何其他可接受的內容類型。

您的第二個問題:只是不要將它用於它不是爲它設計的網絡環境。

+0

我研究了你提到的鏈接,它只是寫入excel的另一種方式。這樣做我沒有問題。 我曾嘗試調用JavaScript之前,但它仍然沒有顯示任何東西。 和你的第二個答案:那麼是否有任何解決方法呢?我們是否有確定的方法知道所有的參考文獻已經被清理? –

+0

你必須明白,openXML只是生成一個與Excel兼容的XML文件。它不是一個在後臺工作的進程。您需要對服務器進行Ajax調用並返回行數,然後將結果提示給客戶端。 – AMember

+0

事情是,我不能在我的代碼中使用任何第三方的東西。 所以如果可能的話,你可以幫助我而不這樣做。 –