|
protected void btnExport_Click(object sender, EventArgs e) 3 { 4 string strMapPath = Server.MapPath("~/"); //獲取Web應(yīng)用程序的物理路徑 5 string sourceExcelFileName = strMapPath + "Temp.xls"; //源Excel文件名 6 string targetExcelFileName = strMapPath + @"TempExcel\" + Guid.NewGuid().ToString() + ".xls"; //使用Guid生成全局唯一字符串,作為目標(biāo)Excel文件的文件名 7 8 File.Copy(sourceExcelFileName, targetExcelFileName); //Copy文件,放在目標(biāo)文件夾中 9 10 //Excel模型,用來操作Excel文件 11 Microsoft.Office.Interop.Excel.Application excelApp = null; 12 Microsoft.Office.Interop.Excel.Workbook excelWb = null; 13 Microsoft.Office.Interop.Excel.Worksheet excelWs = null; 14 Microsoft.Office.Interop.Excel.Range excelR = null; 15 16 try 17 { 18 excelApp = new Microsoft.Office.Interop.Excel.Application(); 19 excelWb = excelApp.Workbooks.Open(targetExcelFileName); //打開Excel工作簿文件 20 excelWs = (Microsoft.Office.Interop.Excel.Worksheet)(excelWb.Sheets.get_Item(1)); //選擇工作簿中第一個(gè)工作表 21 22 //向Excel中添加列名 23 for (int i = 0; i < dtbl.Columns.Count; i++) 24 { 25 string rangeName = ((Char)(i + 65)).ToString() + "1"; //計(jì)算出單元格的位置(例:第一行第二列在Excel中為B1,即為值為1+65的字符+"1"。) 26 excelR = excelWs.get_Range(rangeName); 27 excelR.Value = dtbl.Columns[i].ColumnName; //在對應(yīng)單元格中寫入值 28 } 29 30 //把每一行數(shù)據(jù)寫入Excel模型中 31 for (int i = 0; i < dtbl.Rows.Count; i++) 32 { 33 for (int j = 0; j < dtbl.Columns.Count; j++) 34 { 35 string rangName = ((Char)(j + 65)).ToString() + (i + 2).ToString(); //表格內(nèi)容的寫入從第二行開始 36 excelR = excelWs.get_Range(rangName); 37 excelR.Value = dtbl.Rows[i][j]; //在Excel中寫入對應(yīng)單元格的內(nèi)容 38 } 39 } 40 excelWb.Save(); 41 42 } 43 catch (Exception) 44 { 45 Response.Write("<script type='text/javascript'>alert('生成失??!');</script>"); 46 } 47 finally 48 { 49 //關(guān)閉Excel,否則Excel文件將無法被打開 50 excelWb.Close(); 51 excelApp.Workbooks.Close(); 52 excelApp.Quit(); 53 } 54 55 //向客戶端發(fā)送文件... 56 Response.Clear(); 57 Response.AddHeader("Content-Disposition", "attachment;filename=excel.xls"); //設(shè)置回發(fā)內(nèi)容為Excel 58 Response.ContentType = "application/ms-excel"; 59 Response.WriteFile(targetExcelFileName); //把剛剛生成的Excel文件寫入Http流 60 Response.End(); 61 62 }
2.由于會在臨時(shí)文件夾中存儲Excel文件,所以寫了一個(gè)類用來清理過期不用的Excel文件:
3.在Golobal.asax中的代碼,在Web應(yīng)用程序啟動(dòng)時(shí)開始臨時(shí)文件清理的服務(wù):
|
|
|