DataTable 导出Excel

第一步:添加对 org.in2bits.MyXls.dll程序集的引用。 



 #region 类型
        public string headlines;
        public string headlinesfont;

        public string smalltitle;
        public int titlefontsize;
        public string titlefont;
        public string title_l;
        public string title_m;
        public string title_r;
        public int st_l, st_m, st_r;
        public string tailline;
        public string tailfont;
        public string tail_l;
        public string tail_m;
        public string tail_r;
        public int tl_l, tl_m, tl_r;
        public int xm_cnt;

        public string datafont;
        public string cellnull;
        public string sheetname;

        public string title;
        public string tail;
        #endregion

        /// <summary>
        /// 导出
        /// </summary>
        /// <param name="dt">数据源</param>
        /// <param name="ClmName">标题,表头 列</param>
        /// <param name="ClmType">数据类型</param>
        /// <param name="FieldName">字段名</param>
        /// <param name="Clmwidth">每一格宽度</param>
        /// <param name="FileName">文件名</param>
        /// <param name="FilePath">文件路径</param>
        public void ExcelExport(DataTable dt, string[] ClmName, string[] ClmType, string[] FieldName, int[] Clmwidth, string FileName, string FilePath)
        {
            XlsDocument xls = new XlsDocument();
            //指定文件名
            xls.FileName = FileName + ".xls";
            //添加工作表
            Worksheet sheet;
            if (sheetname == null || sheetname == "") sheet = xls.Workbook.Worksheets.Add("Sheet1");
            else sheet = xls.Workbook.Worksheets.Add(sheetname);

            #region 设置各数据列的大小
            int i, clmct = ClmName.Length;
            for (i = 0; i < clmct; i++)
            {
                ColumnInfo colInfo1 = new ColumnInfo(xls, sheet);

                colInfo1.ColumnIndexStart = (ushort)i;

                colInfo1.ColumnIndexEnd = (ushort)(i + 1);

                colInfo1.Width = (ushort)(Clmwidth[i] * 256);

                sheet.AddColumnInfo(colInfo1);

            }

            #endregion

            Cells cells = sheet.Cells;
            int Ln = 1;

            #region 添加大标题
            if (String.IsNullOrEmpty(headlines) == false)
            {
                //合并单元格
                MergeArea maTitle = new MergeArea(Ln, Ln, 1, clmct);//1行,clmct列
                sheet.AddMergeArea(maTitle);
                //单元格属性
                XF xfTitle = xls.NewXF();
                //对齐方式
                xfTitle.HorizontalAlignment = HorizontalAlignments.Centered;
                xfTitle.VerticalAlignment = VerticalAlignments.Centered;
                //字体
                if (headlinesfont == null || headlinesfont == "") xfTitle.Font.FontName = "宋体";
                else xfTitle.Font.FontName = headlinesfont;
                xfTitle.Font.Height = 16 * 20;
                xfTitle.Font.Bold = true;

                cells.Add(Ln, 1, headlines, xfTitle);
                Ln++;
            }
            #endregion

            #region 添加小标题
            if (String.IsNullOrEmpty(smalltitle) == false)
            {
                //合并单元格
                MergeArea maTime1 = new MergeArea(Ln, Ln, 1, clmct);//1行
                sheet.AddMergeArea(maTime1);

                //单元格属性
                XF xfTopBar = xls.NewXF();
                xfTopBar.HorizontalAlignment = HorizontalAlignments.Centered;
                xfTopBar.VerticalAlignment = VerticalAlignments.Centered;
                if (String.IsNullOrEmpty(titlefont)) xfTopBar.Font.FontName = "宋体";
                else xfTopBar.Font.FontName = titlefont;
                if (String.IsNullOrEmpty(titlefontsize.ToString())) xfTopBar.Font.Height = 14 * 20;
                else xfTopBar.Font.Height = Convert.ToUInt16(titlefontsize);
                cells.Add(Ln, 1, smalltitle, xfTopBar);
                Ln++;
            }
            #endregion

            #region 添加参数标题: 左,中,右
            if (String.IsNullOrEmpty(title_l) == false || String.IsNullOrEmpty(title_m) == false || String.IsNullOrEmpty(title_r) == false)
            {
                int w1 = 1;
                if (String.IsNullOrEmpty(title_l) == false)
                {
                    //合并单元格
                    int w2 = st_l;
                    MergeArea maTime21 = new MergeArea(Ln, Ln, w1, w2);//1行
                    sheet.AddMergeArea(maTime21);

                    //单元格属性
                    XF xfTopBar = xls.NewXF();
                    if (String.IsNullOrEmpty(titlefont)) xfTopBar.Font.FontName = "宋体";
                    else xfTopBar.Font.FontName = titlefont;
                    if (String.IsNullOrEmpty(titlefontsize.ToString())) xfTopBar.Font.Height = 14 * 20;
                    else xfTopBar.Font.Height = Convert.ToUInt16(titlefontsize);
                    cells.Add(Ln, 1, title_l, xfTopBar);
                    w1 = w2 + 1;
                }
                if (String.IsNullOrEmpty(title_m) == false)
                {
                    //合并单元格
                    int w2 = w1 + st_m - 1;
                    MergeArea maTime22 = new MergeArea(Ln, Ln, w1, w2);//1行
                    sheet.AddMergeArea(maTime22);

                    //单元格属性
                    XF xfTopBar = xls.NewXF();
                    if (String.IsNullOrEmpty(titlefont)) xfTopBar.Font.FontName = "宋体";
                    else xfTopBar.Font.FontName = titlefont;
                    if (String.IsNullOrEmpty(titlefontsize.ToString())) xfTopBar.Font.Height = 14 * 20;
                    else xfTopBar.Font.Height = Convert.ToUInt16(titlefontsize);
                    cells.Add(Ln, w1, title_m, xfTopBar);
                    w1 = w2 + 1;
                }
                if (String.IsNullOrEmpty(title_r) == false)
                {
                    //合并单元格
                    int w2 = w1 + st_r - 1;
                    MergeArea maTime23 = new MergeArea(Ln, Ln, w1, w2);//1行
                    sheet.AddMergeArea(maTime23);

                    //单元格属性
                    XF xfTopBar = xls.NewXF();
                    xfTopBar.HorizontalAlignment = HorizontalAlignments.Right;
                    if (String.IsNullOrEmpty(titlefont)) xfTopBar.Font.FontName = "宋体";
                    else xfTopBar.Font.FontName = titlefont;
                    if (titlefontsize == 0) xfTopBar.Font.Height = 14 * 20;
                    else xfTopBar.Font.Height = Convert.ToUInt16(titlefontsize);
                    cells.Add(Ln, w1, title_r, xfTopBar);
                }
                Ln++;
            }
            #endregion

            #region 设置Excel数据列标题的格式
            XF xfDataHead = xls.NewXF();
            xfDataHead.HorizontalAlignment = HorizontalAlignments.Centered;
            xfDataHead.VerticalAlignment = VerticalAlignments.Centered;
            xfDataHead.Font.FontName = "宋体";
            xfDataHead.Font.Bold = true;
            xfDataHead.UseBorder = true;
            xfDataHead.TextWrapRight = true;

            xfDataHead.BottomLineStyle = 1;
            xfDataHead.BottomLineColor = Colors.Black;
            xfDataHead.TopLineStyle = 1;
            xfDataHead.TopLineColor = Colors.Black;
            xfDataHead.LeftLineStyle = 1;
            xfDataHead.LeftLineColor = Colors.Black;
            xfDataHead.RightLineStyle = 1;
            xfDataHead.RightLineColor = Colors.Black;

            #endregion

            #region 添加列标题
            for (i = 0; i < clmct; i++) cells.Add(Ln, i + 1, ClmName[i], xfDataHead);
            Ln++;
            #endregion

            #region 设置各数据列的格式

            XF xfData = xls.NewXF();
            xfData.HorizontalAlignment = HorizontalAlignments.Centered;
            xfData.Font.FontName = "宋体";
            xfData.Font.Height = 8 * 20;
            xfData.UseBorder = true;
            xfData.BottomLineStyle = 1;
            xfData.BottomLineColor = Colors.Black;
            xfData.TopLineStyle = 1;
            xfData.TopLineColor = Colors.Black;
            xfData.LeftLineStyle = 1;
            xfData.LeftLineColor = Colors.Black;
            xfData.RightLineStyle = 1;
            xfData.RightLineColor = Colors.Black;
            xfData.TextWrapRight = true;


            XF xfData2 = xls.NewXF();
            xfData2.Font.FontName = "宋体";
            xfData2.UseBorder = true;
            xfData2.BottomLineStyle = 1;
            xfData2.BottomLineColor = Colors.Black;
            xfData2.TopLineStyle = 1;
            xfData2.TopLineColor = Colors.Black;
            xfData2.LeftLineStyle = 1;
            xfData2.LeftLineColor = Colors.Black;
            xfData2.RightLineStyle = 1;
            xfData2.RightLineColor = Colors.Black;
            xfData2.TextWrapRight = true;

            #endregion

            #region 填充数据
            string dtnull = "";
            if (String.IsNullOrEmpty(cellnull) == false) dtnull = cellnull;

            foreach (DataRow dr in dt.Rows)
            {
                for (i = 0; i < clmct; i++)
                {
                    if (ClmType[i].ToString() == "Double")
                    {
                        if (dr[FieldName[i]] == DBNull.Value) cells.Add(Ln, (ushort)(i + 1), dtnull, xfData2);
                        else cells.Add(Ln, i + 1, Convert.ToDouble(dr[FieldName[i]]), xfData2);
                    }
                    else
                    {
                        if (dr[FieldName[i]] == DBNull.Value) cells.Add(Ln, (ushort)(i + 1), dtnull, xfData);
                        else cells.Add(Ln, i + 1, dr[FieldName[i]].ToString(), xfData);
                    }
                }
                Ln++;
            }
            #endregion

            #region 添加结尾行: 可细化左,中,右
            if (String.IsNullOrEmpty(tail_l) == false || String.IsNullOrEmpty(tail_m) == false || String.IsNullOrEmpty(tail_r) == false)
            {
                int w1 = 1;
                if (String.IsNullOrEmpty(tail_l) == false)
                {
                    //合并单元格
                    int w2 = tl_l;
                    MergeArea maTime21 = new MergeArea(Ln, Ln, w1, w2);//1行
                    sheet.AddMergeArea(maTime21);

                    //单元格属性
                    XF xfTopBar = xls.NewXF();
                    if (String.IsNullOrEmpty(tailfont)) xfTopBar.Font.FontName = "宋体";
                    else xfTopBar.Font.FontName = tailfont;
                    cells.Add(Ln, 1, tail_l, xfTopBar);
                    w1 = w2 + 1;
                }
                if (String.IsNullOrEmpty(tail_m) == false)
                {
                    //合并单元格
                    int w2 = w1 + tl_m - 1;
                    MergeArea maTime22 = new MergeArea(Ln, Ln, w1, w2);//1行
                    sheet.AddMergeArea(maTime22);

                    //单元格属性
                    XF xfTopBar = xls.NewXF();
                    if (String.IsNullOrEmpty(tailfont)) xfTopBar.Font.FontName = "宋体";
                    else xfTopBar.Font.FontName = tailfont;
                    cells.Add(Ln, w1, tail_m, xfTopBar);
                    w1 = w2 + 1;
                }
                if (String.IsNullOrEmpty(tail_r) == false)
                {
                    //合并单元格
                    int w2 = w1 + tl_r - 1;
                    MergeArea maTime23 = new MergeArea(Ln, Ln, w1, w2);//1行
                    sheet.AddMergeArea(maTime23);

                    //单元格属性
                    XF xfTopBar = xls.NewXF();
                    xfTopBar.HorizontalAlignment = HorizontalAlignments.Right;
                    if (String.IsNullOrEmpty(tailfont)) xfTopBar.Font.FontName = "宋体";
                    else xfTopBar.Font.FontName = tailfont;
                    cells.Add(Ln, w1, tail_r, xfTopBar);
                }
                Ln++;
            }
            #endregion


            //发送到客户端
            xls.Save(FilePath, true);
            xls.Send();
            System.IO.File.Delete(FilePath + xls.FileName);
        }
    }

org.in2bits.MyXls.rar     引用组件 下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值