今天做報表的時候遇到了多表頭的問題,而且相應的報表的格式都一樣。所以就采用了報表模板的方式來進行。
第一步:在開發的當前項目中引入: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);
詳細請看源碼