今天做報表的時候遇到了多表頭的問題,而且相應的報表的格式都一樣。所以就採用了報表範本的方式來進行。
第一步:在開發的當前項目中引入:Microsoft.Office.Interop.Excel;System.Reflection;命名空間。
第二步:擷取要匯出的資料;
第三步:建立一個Excel 應用程式:
//需要添加 Microsoft.Office.Interop.Excel引用 Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
如果,app = null ,則代表格服務器上“伺服器上缺少Excel組件,需要安裝Office軟體”;
第四步:設定app屬性,及其進行如下操作:
app.Visible = false; app.UserControl = true; Microsoft.Office.Interop.Excel.Workbooks workbooks = app.Workbooks; Microsoft.Office.Interop.Excel._Workbook workbook = workbooks.Add(Server.MapPath("~/Template.xlsx")); //載入模板 Microsoft.Office.Interop.Excel.Sheets sheets = workbook.Sheets; Microsoft.Office.Interop.Excel._Worksheet worksheet = (Microsoft.Office.Interop.Excel._Worksheet)sheets.get_Item(1); //第一個工作薄。 if (worksheet == null) return; //工作薄中沒有工作表.
第五步:根據獲得的資料,進行資料的插入(到Excel模板中);
//寫入資料,Excel索引從1開始。 for (int i = 1; i <= rowCount; i++) { int row_ = 2 + i; //Excel模板上表頭和標題列佔了2行,根據實際模板需要修改; int dt_row = i - 1; //dataTable的行是從0開始的。 worksheet.Cells[row_, 1] = i.ToString(); worksheet.Cells[row_, 2] = dt.Rows[dt_row]["姓名"].ToString(); worksheet.Cells[row_, 3] = dt.Rows[dt_row]["學號"].ToString(); }
第六步:設定已匯入的資料的樣式:
//調整Excel的樣式。 Microsoft.Office.Interop.Excel.Range rg = worksheet.Cells.get_Range("A3", worksheet.Cells[rowCount + 2, 8]); rg.Borders.LineStyle = 1; //儲存格加邊框。 worksheet.Columns.AutoFit(); //自動調整列寬。
第七步:對已匯出好的Excel報表進行儲存到伺服器,以便進行下載。
//Missing 在System.Reflection命名空間下。 string savaPath = "~/Temp/T1_" + DateTime.Now.ToString("yyyyMMddHHmmss") + ".xlsx"; workbook.SaveAs(Server.MapPath(savaPath), Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
詳細請看源碼