首页 > 代码库 > C#EXCEL 操作类--C#DataToExcel帮助类

C#EXCEL 操作类--C#DataToExcel帮助类

using System;using System.Diagnostics;//using Excel;namespace DotNet.Utilities{    /// <summary>    /// 操作EXCEL导出数据报表的类    /// </summary>    public class DataToExcel    {        public DataToExcel()        {        }         #region 操作EXCEL的一个类(需要Excel.dll支持)         private int titleColorindex = 15;        /// <summary>        /// 标题背景色        /// </summary>        public int TitleColorIndex        {            set { titleColorindex = value; }            get { return titleColorindex; }        }         private DateTime beforeTime;      //Excel启动之前时间        private DateTime afterTime;        //Excel启动之后时间         #region 创建一个Excel示例        /// <summary>        /// 创建一个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);            ////打开显示            //excel.Visible = true;            ////      excel.Quit();            ////      excel=null;                        ////      GC.Collect();//垃圾回收        }        #endregion         #region 将DataTable的数据导出显示为报表        /// <summary>        /// 将DataTable的数据导出显示为报表        /// </summary>        /// <param name="dt">要导出的数据</param>        /// <param name="strTitle">导出报表的标题</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;         //    //取得列标题              //    foreach (DataColumn col in dt.Columns)        //    {        //        colIndex++;        //        excel.Cells[4, colIndex] = col.ColumnName;         //        //设置标题格式为居中对齐        //        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;//设置为浅黄色,共计有56种        //    }          //    //取得表格中的数据              //    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;//设置日期型的字段格式为居中对齐        //            }        //            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;//设置字符型的字段格式为居中对齐        //                }        //                else        //                {        //                    excel.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();        //                }        //        }        //    }         //    //加载一个合计行              //    int rowSum = rowIndex + 1;        //    int colSum = 2;        //    excel.Cells[rowSum, 2] = "合计";        //    xSt.get_Range(excel.Cells[rowSum, 2], excel.Cells[rowSum, 2]).HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;        //    //设置选中的部分的颜色              //    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;//设置为浅黄色,共计有56种         //    //取得整个报表的标题              //    excel.Cells[2, 2] = strTitle;         //    //设置整个报表的标题格式              //    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;         //    //设置报表表格为最适应宽度              //    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();         //    //设置整个报表的标题为跨列居中              //    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;//设置左边线加粗        //    xSt.get_Range(excel.Cells[4, 2], excel.Cells[4, colIndex]).Borders[Excel.XlBordersIndex.xlEdgeTop].Weight = Excel.XlBorderWeight.xlThick;//设置上边线加粗        //    xSt.get_Range(excel.Cells[4, colIndex], excel.Cells[rowSum, colIndex]).Borders[Excel.XlBordersIndex.xlEdgeRight].Weight = Excel.XlBorderWeight.xlThick;//设置右边线加粗        //    xSt.get_Range(excel.Cells[rowSum, 2], excel.Cells[rowSum, colIndex]).Borders[Excel.XlBordersIndex.xlEdgeBottom].Weight = Excel.XlBorderWeight.xlThick;//设置下边线加粗           //    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  结束Excel进程         //    //需要对Excel的DCOM对象进行配置:dcomcnfg          //    //excel.Quit();        //    //excel=null;                     //    xBk.Close(null, null, null);        //    excel.Workbooks.Close();        //    excel.Quit();          //    //注意:这里用到的所有Excel对象都要执行这个操作,否则结束不了Excel进程        //    //      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进程         /// <summary>        /// 结束Excel进程        /// </summary>        public void KillExcelProcess()        {            Process[] myProcesses;            DateTime startTime;            myProcesses = Process.GetProcessesByName("Excel");             //得不到Excel进程ID,暂时只能判断进程启动时间            foreach (Process myProcess in myProcesses)            {                startTime = myProcess.StartTime;                if (startTime > beforeTime && startTime < afterTime)                {                    myProcess.Kill();                }            }        }        #endregion         #endregion         #region 将DataTable的数据导出显示为报表(不使用Excel对象,使用COM.Excel)         #region 使用示例        /*使用示例:         * DataSet ds=(DataSet)Session["AdBrowseHitDayList"];            string ExcelFolder=Assistant.GetConfigString("ExcelFolder");            string FilePath=Server.MapPath(".")+"\\"+ExcelFolder+"\\";                   //生成列的中文对应表            Hashtable nameList = new Hashtable();            nameList.Add("ADID", "广告编码");            nameList.Add("ADName", "广告名称");            nameList.Add("year", "年");            nameList.Add("month", "月");            nameList.Add("browsum", "显示数");            nameList.Add("hitsum", "点击数");            nameList.Add("BrowsinglIP", "独立IP显示");            nameList.Add("HitsinglIP", "独立IP点击");            //利用excel对象            DataToExcel dte=new DataToExcel();            string filename="";            try            {                      if(ds.Tables[0].Rows.Count>0)                {                    filename=dte.DataExcel(ds.Tables[0],"标题",FilePath,nameList);                }            }            catch            {                //dte.KillExcelProcess();            }                   if(filename!="")            {                Response.Redirect(ExcelFolder+"\\"+filename,true);            }         *          * */         #endregion         /// <summary>        /// 将DataTable的数据导出显示为报表(不使用Excel对象)        /// </summary>        /// <param name="dt">数据DataTable</param>        /// <param name="strTitle">标题</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 = "页眉";        //    string footer = "页脚";        //    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;         //    // 报表标题        //    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;           //    //取得列标题                //    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);        //    }         //    //取得表格中的数据              //    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,"请打开文件c:\\test.xls!");        //    //      }        //    return filename;         //}         #endregion         #region  清理过时的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     }}