EXCEL導(dǎo)出數(shù)據(jù)報(bào)表幫助類
創(chuàng)建一個(gè)Excel示例
將DataTable的數(shù)據(jù)導(dǎo)出顯示為報(bào)表
結(jié)束Excel進(jìn)程
將DataTable的數(shù)據(jù)導(dǎo)出顯示為報(bào)表(不使用Excel對(duì)象)
清理過(guò)時(shí)的Excel文件
using System; using System.Diagnostics; using System.Collections; using System.Data; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using Excel; namespace Jsons.cn { /// <summary> /// 操作EXCEL導(dǎo)出數(shù)據(jù)報(bào)表的類 /// </summary> public class DataToExcel { public DataToExcel() { } #region 操作EXCEL的一個(gè)類(需要Excel.dll支持) private int titleColorindex = 15; /// <summary> /// 標(biāo)題背景色 /// </summary> public int TitleColorIndex { set { titleColorindex = value; } get { return titleColorindex; } } private DateTime beforeTime; //Excel啟動(dòng)之前時(shí)間 private DateTime afterTime; //Excel啟動(dòng)之后時(shí)間 #region 創(chuàng)建一個(gè)Excel示例 /// <summary> /// 創(chuàng)建一個(gè)Excel示例 /// </summary> public void CreateExcel() { Excel.Application excel = new Excel.Application(); excel.Application.Workbooks.Add(true); excel.Cells[1, 1] = "第1行第1列"; excel.Cells[1, 2] = "第1行第2列"; excel.Cells[2, 1] = "第2行第1列"; excel.Cells[2, 2] = "第2行第2列"; excel.Cells[3, 1] = "第3行第1列"; excel.Cells[3, 2] = "第3行第2列"; //保存 excel.ActiveWorkbook.SaveAs("./tt.xls", XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null); //打開(kāi)顯示 excel.Visible = true; // excel.Quit(); // excel=null; // GC.Collect();//垃圾回收 } #endregion #region 將DataTable的數(shù)據(jù)導(dǎo)出顯示為報(bào)表 /// <summary> /// 將DataTable的數(shù)據(jù)導(dǎo)出顯示為報(bào)表 /// </summary> /// <param name="dt">要導(dǎo)出的數(shù)據(jù)</param> /// <param name="strTitle">導(dǎo)出報(bào)表的標(biāo)題</param> /// <param name="FilePath">保存文件的路徑</param> /// <returns></returns> public string OutputExcel(System.Data.DataTable dt, string strTitle, string FilePath) { beforeTime = DateTime.Now; Excel.Application excel; Excel._Workbook xBk; Excel._Worksheet xSt; int rowIndex = 4; int colIndex = 1; excel = new Excel.ApplicationClass(); xBk = excel.Workbooks.Add(true); xSt = (Excel._Worksheet)xBk.ActiveSheet; //取得列標(biāo)題 foreach (DataColumn col in dt.Columns) { colIndex ; excel.Cells[4, colIndex] = col.ColumnName; //設(shè)置標(biāo)題格式為居中對(duì)齊 xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).Font.Bold = true; xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter; xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).Select(); xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[4, colIndex]).Interior.ColorIndex = titleColorindex;//19;//設(shè)置為淺黃色,共計(jì)有56種 } //取得表格中的數(shù)據(jù) foreach (DataRow row in dt.Rows) { rowIndex ; colIndex = 1; foreach (DataColumn col in dt.Columns) { colIndex ; if (col.DataType == System.Type.GetType("System.DateTime")) { excel.Cells[rowIndex, colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString())).ToString ("yyyy-MM-dd"); xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//設(shè)置日期型的字段格式為居中對(duì)齊 } else if (col.DataType == System.Type.GetType("System.String")) { excel.Cells[rowIndex, colIndex] = "'" row[col.ColumnName].ToString(); xSt.get_Range(excel.Cells[rowIndex, colIndex], excel.Cells[rowIndex, colIndex]).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter;//設(shè)置字符型的字段格式為居中對(duì)齊 } else { excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString(); } } } //加載一個(gè)合計(jì)行 int rowSum = rowIndex 1; int colSum = 2; excel.Cells[rowSum, 2] = "合計(jì)"; xSt.get_Range(excel.Cells[rowSum, 2], excel.Cells[rowSum, 2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; //設(shè)置選中的部分的顏色 xSt.get_Range(excel.Cells[rowSum, colSum], excel.Cells[rowSum, colIndex]).Select(); //xSt.get_Range(excel.Cells[rowSum,colSum],excel.Cells[rowSum,colIndex]).Interior.ColorIndex =Assistant.GetConfigInt("ColorIndex");// 1;//設(shè)置為淺黃色,共計(jì)有56種 //取得整個(gè)報(bào)表的標(biāo)題 excel.Cells[2, 2] = strTitle; //設(shè)置整個(gè)報(bào)表的標(biāo)題格式 xSt.get_Range(excel.Cells[2, 2], excel.Cells[2, 2]).Font.Bold = true; xSt.get_Range(excel.Cells[2, 2], excel.Cells[2, 2]).Font.Size = 22; //設(shè)置報(bào)表表格為最適應(yīng)寬度 xSt.get_Range(excel.Cells[4, 2], excel.Cells[rowSum, colIndex]).Select(); xSt.get_Range(excel.Cells[4, 2], excel.Cells[rowSum, colIndex]).Columns.AutoFit(); //設(shè)置整個(gè)報(bào)表的標(biāo)題為跨列居中 xSt.get_Range(excel.Cells[2, 2], excel.Cells[2, colIndex]).Select(); xSt.get_Range(excel.Cells[2, 2], excel.Cells[2, colIndex]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenterAcrossSelection; //繪制邊框 xSt.get_Range(excel.Cells[4, 2], excel.Cells[rowSum, colIndex]).Borders.LineStyle = 1; xSt.get_Range(excel.Cells[4, 2], excel.Cells[rowSum, 2]).Borders[Excel.XlBordersIndex.xlEdgeLeft].Weight = Excel.XlBorderWeight.xlThick;//設(shè)置左邊線加粗 xSt.get_Range(excel.Cells[4, 2], excel.Cells[4, colIndex]).Borders[Excel.XlBordersIndex.xlEdgeTop].Weight = Excel.XlBorderWeight.xlThick;//設(shè)置上邊線加粗 xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[rowSum, colIndex]).Borders [Excel.XlBordersIndex.xlEdgeRight].Weight = Excel.XlBorderWeight.xlThick;//設(shè)置右邊線加粗 xSt.get_Range(excel.Cells[rowSum, 2], excel.Cells[rowSum, colIndex]).Borders [Excel.XlBordersIndex.xlEdgeBottom].Weight = Excel.XlBorderWeight.xlThick;//設(shè)置下邊線加粗 afterTime = DateTime.Now; //顯示效果 //excel.Visible=true; //excel.Sheets[0] = "sss"; ClearFile(FilePath); string filename = DateTime.Now.ToString("yyyyMMddHHmmssff") ".xls"; excel.ActiveWorkbook.SaveAs(FilePath filename, Excel.XlFileFormat.xlExcel9795, null, null, false, false, Excel.XlSaveAsAccessMode.xlNoChange, null, null, null, null, null); //wkbNew.SaveAs strBookName; //excel.Save(strExcelFileName); #region 結(jié)束Excel進(jìn)程 //需要對(duì)Excel的DCOM對(duì)象進(jìn)行配置:dcomcnfg //excel.Quit(); //excel=null; xBk.Close(null, null, null); excel.Workbooks.Close(); excel.Quit(); //注意:這里用到的所有Excel對(duì)象都要執(zhí)行這個(gè)操作,否則結(jié)束不了Excel進(jìn)程 // if(rng != null) // { // System.Runtime.InteropServices.Marshal.ReleaseComObject(rng); // rng = null; // } // if(tb != null) // { // System.Runtime.InteropServices.Marshal.ReleaseComObject(tb); // tb = null; // } if (xSt != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(xSt); xSt = null; } if (xBk != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(xBk); xBk = null; } if (excel != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(excel); excel = null; } GC.Collect();//垃圾回收 #endregion return filename; } #endregion #region Kill Excel進(jìn)程 /// <summary> /// 結(jié)束Excel進(jìn)程 /// </summary> public void KillExcelProcess() { Process[] myProcesses; DateTime startTime; myProcesses = Process.GetProcessesByName("Excel"); //得不到Excel進(jìn)程ID,暫時(shí)只能判斷進(jìn)程啟動(dòng)時(shí)間 foreach (Process myProcess in myProcesses) { startTime = myProcess.StartTime; if (startTime > beforeTime && startTime < afterTime) { myProcess.Kill(); } } } #endregion #endregion #region 將DataTable的數(shù)據(jù)導(dǎo)出顯示為報(bào)表(不使用Excel對(duì)象,使用COM.Excel) #region 使用示例 /*使用示例: * DataSet ds=(DataSet)Session["AdBrowseHitDayList"]; string ExcelFolder=Assistant.GetConfigString("ExcelFolder"); string FilePath=Server.MapPath(".") "\\" ExcelFolder "\\"; //生成列的中文對(duì)應(yīng)表 Hashtable nameList = new Hashtable(); nameList.Add("ADID", "廣告編碼"); nameList.Add("ADName", "廣告名稱"); nameList.Add("year", "年"); nameList.Add("month", "月"); nameList.Add("browsum", "顯示數(shù)"); nameList.Add("hitsum", "點(diǎn)擊數(shù)"); nameList.Add("BrowsinglIP", "獨(dú)立IP顯示"); nameList.Add("HitsinglIP", "獨(dú)立IP點(diǎn)擊"); //利用excel對(duì)象 DataToExcel dte=new DataToExcel(); string filename=""; try { if(ds.Tables[0].Rows.Count>0) { filename=dte.DataExcel(ds.Tables[0],"標(biāo)題",FilePath,nameList); } } catch { //dte.KillExcelProcess(); } if(filename!="") { Response.Redirect(ExcelFolder "\\" filename,true); } * * */ #endregion /// <summary> /// 將DataTable的數(shù)據(jù)導(dǎo)出顯示為報(bào)表(不使用Excel對(duì)象) /// </summary> /// <param name="dt">數(shù)據(jù)DataTable</param> /// <param name="strTitle">標(biāo)題</param> /// <param name="FilePath">生成文件的路徑</param> /// <param name="nameList"></param> /// <returns></returns> public string DataExcel(System.Data.DataTable dt, string strTitle, string FilePath, Hashtable nameList) { COM.Excel.cExcelFile excel = new COM.Excel.cExcelFile(); ClearFile(FilePath); string filename = DateTime.Now.ToString("yyyyMMddHHmmssff") ".xls"; excel.CreateFile(FilePath filename); excel.PrintGridLines = false; COM.Excel.cExcelFile.MarginTypes mt1 = COM.Excel.cExcelFile.MarginTypes.xlsTopMargin; COM.Excel.cExcelFile.MarginTypes mt2 = COM.Excel.cExcelFile.MarginTypes.xlsLeftMargin; COM.Excel.cExcelFile.MarginTypes mt3 = COM.Excel.cExcelFile.MarginTypes.xlsRightMargin; COM.Excel.cExcelFile.MarginTypes mt4 = COM.Excel.cExcelFile.MarginTypes.xlsBottomMargin; double height = 1.5; excel.SetMargin(ref mt1, ref height); excel.SetMargin(ref mt2, ref height); excel.SetMargin(ref mt3, ref height); excel.SetMargin(ref mt4, ref height); COM.Excel.cExcelFile.FontFormatting ff = COM.Excel.cExcelFile.FontFormatting.xlsNoFormat; string font = "宋體"; short fontsize = 9; excel.SetFont(ref font, ref fontsize, ref ff); byte b1 = 1, b2 = 12; short s3 = 12; excel.SetColumnWidth(ref b1, ref b2, ref s3); string header = "頁(yè)眉"; string footer = "頁(yè)腳"; excel.SetHeader(ref header); excel.SetFooter(ref footer); COM.Excel.cExcelFile.ValueTypes vt = COM.Excel.cExcelFile.ValueTypes.xlsText; COM.Excel.cExcelFile.CellFont cf = COM.Excel.cExcelFile.CellFont.xlsFont0; COM.Excel.cExcelFile.CellAlignment ca = COM.Excel.cExcelFile.CellAlignment.xlsCentreAlign; COM.Excel.cExcelFile.CellHiddenLocked chl = COM.Excel.cExcelFile.CellHiddenLocked.xlsNormal; // 報(bào)表標(biāo)題 int cellformat = 1; // int rowindex = 1,colindex = 3; // object title = (object)strTitle; // excel.WriteValue(ref vt, ref cf, ref ca, ref chl,ref rowindex,ref colindex,ref title,ref cellformat); int rowIndex = 1;//起始行 int colIndex = 0; //取得列標(biāo)題 foreach (DataColumn colhead in dt.Columns) { colIndex ; string name = colhead.ColumnName.Trim(); object namestr = (object)name; IDictionaryEnumerator Enum = nameList.GetEnumerator(); while (Enum.MoveNext()) { if (Enum.Key.ToString().Trim() == name) { namestr = Enum.Value; } } excel.WriteValue(ref vt, ref cf, ref ca, ref chl, ref rowIndex, ref colIndex, ref namestr, ref cellformat); } //取得表格中的數(shù)據(jù) foreach (DataRow row in dt.Rows) { rowIndex ; colIndex = 0; foreach (DataColumn col in dt.Columns) { colIndex ; if (col.DataType == System.Type.GetType("System.DateTime")) { object str = (object)(Convert.ToDateTime(row[col.ColumnName].ToString())).ToString("yyyy-MM-dd"); ; excel.WriteValue(ref vt, ref cf, ref ca, ref chl, ref rowIndex, ref colIndex, ref str, ref cellformat); } else { object str = (object)row[col.ColumnName].ToString(); excel.WriteValue(ref vt, ref cf, ref ca, ref chl, ref rowIndex, ref colIndex, ref str, ref cellformat); } } } int ret = excel.CloseFile(); // if(ret!=0) // { // //MessageBox.Show(this,"Error!"); // } // else // { // //MessageBox.Show(this,"請(qǐng)打開(kāi)文件c:\\test.xls!"); // } return filename; } #endregion #region 清理過(guò)時(shí)的Excel文件 private void ClearFile(string FilePath) { String[] Files = System.IO.Directory.GetFiles(FilePath); if (Files.Length > 10) { for (int i = 0; i < 10; i ) { try { System.IO.File.Delete(Files[i]); } catch { } } } } #endregion } }
原文鏈接:EXCEL導(dǎo)出數(shù)據(jù)報(bào)表幫助類