zoukankan      html  css  js  c++  java
  • Excel合并单元格 NPOI实现

    首先根据条件,记录需合并单元格的起始行和结束行

    string oldCol0 = ""; //上一行的值,相同则合并
    List<List<int>> mergs = new List<List<int>>(); //各段需合并的单元格行号

    List<int> submerg = new List<int>(); //当前需合并一组单元格行号

    for (int i = 0; i < dt.Rows.Count; i++)
    {
    DataRow dtRow = dt.Rows[i];
    IRow excelRow = sheet.CreateRow(rowIndex++);

    for (int j = startCol; j < dtRow.ItemArray.Length; j++)
    {
    ICell cell_Conent = excelRow.CreateCell(j - startCol);

    string val = dtRow[j].ToString(); //以文本或数字两种格式插入Excel,避免数字前面出现绿三角
    double trans;
    if(double.TryParse(val,out trans))
    cell_Conent.SetCellValue(trans);
    else
    cell_Conent.SetCellValue(val);
    cell_Conent.CellStyle = cellStyle_normal;

    if (j == startCol)
    {
    if (val == oldCol0)//与上行值相同,记录需合并单元格
    {
    if (submerg.Count == 0) //开始一段新合并,将本行和上行都记录
    {
    submerg.Add(rowIndex - 2); 
    submerg.Add(rowIndex-1);//行号比index多1,
    }
    else //只记录本行
    submerg.Add(rowIndex-1);
    }
    else //本行与上行值不同,提交当前需合并的单元格行号
    {
    if (submerg.Count > 0)
    mergs.Add(submerg.Clone());

    submerg.Clear();
    }
    oldCol0 = val;
    }

    }
    }
    if (submerg.Count > 0) //最后一行不能忘了
    mergs.Add(submerg.Clone());

    //合并单元格
    if (mergCell)
    {
    /**
    第一个参数:从第几行开始合并
    第二个参数:到第几行结束合并
    第三个参数:从第几列开始合并
    第四个参数:到第几列结束合并
    **/
    for (int i = 0; i < mergs.Count; i++)
    {
    int st = mergs[i][0];
    int ed = mergs[i][mergs[i].Count - 1];
    CellRangeAddress cellRange = new CellRangeAddress(st, ed, 0, 0);
    sheet.AddMergedRegion(cellRange);
    }
    }

  • 相关阅读:
    Spring定时
    随记生成验证码
    缅怀过去
    java运行可以执行文件
    随 记
    TLD生成
    IT鸟的回忆录
    梦之物语
    VINSMono
    WIDOWX 250 6DOF
  • 原文地址:https://www.cnblogs.com/mol1995/p/14422921.html
Copyright © 2011-2022 走看看