這個問題已被問了很多次,但我仍然無法找到適當的解決方案。我有兩個問題。響應後處理頁面停止.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) { }
}
}
我研究了你提到的鏈接,它只是寫入excel的另一種方式。這樣做我沒有問題。 我曾嘗試調用JavaScript之前,但它仍然沒有顯示任何東西。 和你的第二個答案:那麼是否有任何解決方法呢?我們是否有確定的方法知道所有的參考文獻已經被清理? –
你必須明白,openXML只是生成一個與Excel兼容的XML文件。它不是一個在後臺工作的進程。您需要對服務器進行Ajax調用並返回行數,然後將結果提示給客戶端。 – AMember
事情是,我不能在我的代碼中使用任何第三方的東西。 所以如果可能的話,你可以幫助我而不這樣做。 –