zoukankan      html  css  js  c++  java
  • C#导出excel复杂表格(单元各合并)

            /// <summary>
            /// DataTable数据表保存至Excel (合并行报表)【年度日报表】
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="filePath"></param>
            /// <param name="excelParm"></param>
            public static void ToExcel1(DataTable dt, string filePath, ExcelParm excelParm)
            {
                string unitId = Tools.GetAppSetting("UnitId");
                string subTitle = string.Empty;
                if (!string.IsNullOrEmpty(excelParm.GrossWorker))
                {
                    subTitle += "二次司磅员:" + excelParm.GrossWorker + " ";
                }
                if (!string.IsNullOrEmpty(excelParm.CustomerName))
                {
                    subTitle += "客户名称:" + excelParm.CustomerName + " ";
                }
                if (!string.IsNullOrEmpty(excelParm.MaterialName))
                {
                    subTitle += "物料名称:" + excelParm.MaterialName + " ";
                }
                if (!string.IsNullOrEmpty(excelParm.CarNumber))
                {
                    subTitle += "车号:" + excelParm.CarNumber + " ";
                }
                if (!string.IsNullOrEmpty(excelParm.ContractCode))
                {
                    subTitle += "合同号:" + excelParm.ContractCode + " ";
                }
                if (!string.IsNullOrEmpty(excelParm.Datatime1) && !string.IsNullOrEmpty(excelParm.Datatime2))
                {
                    subTitle += "日期:" + excelParm.Datatime1 + " 至 " + excelParm.Datatime2;
                }
    
    
                //新建工作簿  
                Workbook wb = new Workbook();
                //新建工作表  
                Worksheet ws = wb.Worksheets[0];
    
                ws.Name = dt.TableName;
    
                int rowIndex = 3;
                int colIndex = 0;
                int colCount = dt.Columns.Count;
                int rowCount = dt.Rows.Count;
    
                ws.Cells.SetRowHeight(rowIndex, 25);//设置行高
    
                //创建样式
                Style style = wb.Styles[wb.Styles.Add()];//新增样式  
                style.HorizontalAlignment = TextAlignmentType.Center; //单元格内容的水平对齐方式文字居中
                style.Font.Name = "宋体"; //字体
                style.Font.IsBold = true; //设置粗体
                //style.Font.Color = Color.White;//设置字体颜色
                style.Font.Size = 10; //设置字体大小
                //style.ForegroundColor = Color.FromArgb(0, 196, 180); //背景色
                style.Pattern = BackgroundType.Solid;
    
                style.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
                style.Borders[BorderType.TopBorder].Color = Color.Black;
                style.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
                style.Borders[BorderType.BottomBorder].Color = Color.Black;
                style.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
                style.Borders[BorderType.LeftBorder].Color = Color.Black;
                style.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
                style.Borders[BorderType.RightBorder].Color = Color.Black;
    
    
                //列名的处理
                for (int i = 0; i < colCount; i++)
                {
                    ws.Cells[rowIndex, colIndex].PutValue(dt.Columns[i].ColumnName);
                    ws.Cells[rowIndex, colIndex].SetStyle(style);//给单元格关联样式
                    colIndex++;
                }
    
    
                Style style2 = wb.Styles[wb.Styles.Add()];//新增样式
                style2.Font.Name = "宋体";//文字字体
                style2.Font.Size = 10;//文字大小 
                style2.ShrinkToFit = true;
                style2.VerticalAlignment = TextAlignmentType.Center;
    
                style2.Borders[BorderType.TopBorder].LineStyle = CellBorderType.Thin;
                style2.Borders[BorderType.TopBorder].Color = Color.Black;
                style2.Borders[BorderType.BottomBorder].LineStyle = CellBorderType.Thin;
                style2.Borders[BorderType.BottomBorder].Color = Color.Black;
                style2.Borders[BorderType.LeftBorder].LineStyle = CellBorderType.Thin;
                style2.Borders[BorderType.LeftBorder].Color = Color.Black;
                style2.Borders[BorderType.RightBorder].LineStyle = CellBorderType.Thin;
                style2.Borders[BorderType.RightBorder].Color = Color.Black;
    
                Style style3 = wb.Styles[wb.Styles.Add()];//组织标题样式
                style3.Font.Name = "宋体";//文字字体
                style3.Font.Size = 16;//文字大小 
                style3.HorizontalAlignment = TextAlignmentType.Center;
                ws.Cells.SetRowHeight(0, 25);//设置行高
                ws.Cells.Merge(0, 0, 1, dt.Columns.Count);
                ws.Cells[0, 0].PutValue(excelParm.OrganName);
                ws.Cells[0, 0].SetStyle(style3);
    
                Style style5 = wb.Styles[wb.Styles.Add()];//标题样式
                style5.Font.Name = "宋体";//文字字体
                style5.Font.IsBold = true; //设置粗体
                style5.Font.Size = 14;//文字大小 
                style5.HorizontalAlignment = TextAlignmentType.Center;
                ws.Cells.SetRowHeight(1, 25);//设置行高
                ws.Cells.Merge(1, 0, 1, dt.Columns.Count);
                ws.Cells[1, 0].PutValue(dt.TableName);
                ws.Cells[1, 0].SetStyle(style5);
    
                Style style4 = wb.Styles[wb.Styles.Add()];//新增查询条件标题样式
                style4.Font.Name = "宋体";//文字字体
                style4.Font.IsBold = true; //设置粗体
                style4.Font.Size = 10;//文字大小 
                ws.Cells.SetRowHeight(2, 25);//设置行高
                ws.Cells.Merge(2, 0, 1, dt.Columns.Count);
                ws.Cells[2, 0].PutValue(subTitle);
                ws.Cells[2, 0].SetStyle(style4);
    
                rowIndex++;
    
                for (int i = 0; i < rowCount; i++)
                {
                    ws.Cells.SetRowHeight(rowIndex, 25);//设置行高
                    colIndex = 0;
                    for (int j = 0; j < colCount; j++)
                    {
                        ws.Cells[rowIndex, colIndex].PutValue(dt.Rows[i][j].ToString() == "" ? null : dt.Rows[i][j].ToString());
                        style2.ForegroundColor = Color.White;
                        style2.Pattern = BackgroundType.Solid;
                        ws.Cells[rowIndex, colIndex].SetStyle(style2);//给单元格关联样式
                        colIndex++;
                    }
                    rowIndex++;
                }
    
                //设置所有列为自适应列宽 
                ws.AutoFitColumns();
    
                for (int col = 0; col < colCount; col++)
                {
                    ws.Cells.SetColumnWidthPixel(col, ws.Cells.GetColumnWidthPixel(col) + 20);
                }
    
    
                #region 合并单元格
                int mergeDateStart = 4;
                int mergeDate = 1;
    
                int mergeAreaStart = 4;
                int mergeArea = 1;
                for (var i = 0; i < dt.Rows.Count; i++)
                {
                    if (i + 1 < dt.Rows.Count)
                    {
                        //日期
                        if (dt.Rows[i]["日期"].ToString() != dt.Rows[i + 1]["日期"].ToString())
                        {
                            ws.Cells.Merge(mergeDateStart, 0, mergeDate, 1);
                            mergeDateStart += mergeDate;
                            mergeDate = 1;
                        }
                        else
                        {
                            mergeDate++;
                        }
    
                        //区域
                        if (dt.Rows[i]["区域"].ToString() != dt.Rows[i + 1]["区域"].ToString())
                        {
                            ws.Cells.Merge(mergeAreaStart, 1, mergeArea, 1);
                            mergeAreaStart += mergeArea;
                            mergeArea = 1;
                        }
                        else
                        {
                            mergeArea++;
                        }
                    }
                    else
                    {
                        //日期
                        ws.Cells.Merge(mergeDateStart, 0, mergeDate, 1);
                        //区域
                        ws.Cells.Merge(mergeAreaStart, 1, mergeArea, 1);
                    }
                }
                #endregion
    
    
                string fullUpLoadPath = HttpContext.Current.Server.MapPath("~/UpLoad/Excel/");
                //检查本地上传的物理路径是否存在,不存在则创建
                if (!System.IO.Directory.Exists(fullUpLoadPath))
                {
                    System.IO.Directory.CreateDirectory(fullUpLoadPath);
                }
    
                filePath = GetMapPath(filePath);
                if (System.IO.File.Exists(filePath))
                    System.IO.File.Delete(filePath);
                System.IO.FileStream fs = System.IO.File.Create(filePath);
                fs.Close();
                wb.Save(filePath);
            }
  • 相关阅读:
    全局变量 和 局部变量
    函数
    字符串拼接
    集合
    字典
    元祖
    列表
    Python 字符串 小练习
    ssm多数据源配置
    JAVA笔记:double四舍五入并保留两位小数的方法
  • 原文地址:https://www.cnblogs.com/lijunzaizi/p/15751757.html
Copyright © 2011-2022 走看看