Johnway203 2022-06-15 17:50 采纳率: 50%
浏览 160
已结题

Npoi下Excel表中数据填满自动换行的问题

初始数据 为一个List<List>,起名为res,数据内容大概如代码中造的集合所示,但是实际数据量更庞大,性质一样。
然后把这个复合集填入excel的表sheet中,一个List占一行

List<List<string>> ree = new List<List<string>>();
res ={{"0","1","2","3","4","5","6"},{"0","1","2","3"},{"0","1","2"}};

for (int i = 0; i < res.Count; i++)
            {
                    IRow rw = sheet.CreateRow(i);
                    for (int j = 0; j < res[i].Count; j++)
                    {
                         rw.CreateCell(0).SetCellValue("NET" + (i + 1).ToString());
                        rw.CreateCell(1).SetCellValue("sub0");  
                        ICell ce = rw.CreateCell(j + 2);
                        ce.SetCellValue(res[i][j].ToString());
                    }
            }

img

现在要求每行填满三个单元格后自动换行,最终变成如下效果

img


上面的代码该如何修改?

  • 写回答

1条回答 默认 最新

  • 李公子lm 2022-06-16 13:16
    关注

    上面问题中List赋值部分,代码写法有点问题,修改了一下,下面是整个方法,加截图。

     private void button1_Click(object sender, EventArgs e)
            {
                XSSFWorkbook workBook = new XSSFWorkbook();  //实例化XSSF
                XSSFSheet sheet = (XSSFSheet)workBook.CreateSheet();  //创建一个sheet
    
    
                List<List<string>> res = new List<List<string>>();
                res.Add(new List<string>() { "0", "1", "2", "3", "4", "5", "6","7", "8","9", "10" });
                res.Add(new List<string>() { "0", "1", "2", "3" });
                res.Add(new List<string>() { "0", "1", "2" });
                //需要创建的第几行
                int rowIndex = -1;
                for (int i = 0; i < res.Count; i++)
                {
                    rowIndex++;
                    IRow rw = sheet.CreateRow(rowIndex);
                    int count = (int)res[i].Count;
                    for (int j = 0; j < res[i].Count;j++)
                    {
                        //计算j在第几行
                        var rowNumber = (int)j/3;
                        if (rowNumber==0)
                        {
                            //循环length次,赋值。
                            var length = res[i].Count<3 ? res[i].Count : 3;
                            for (int n = 0; n < length; n++)
                            {
                                rw.CreateCell(0).SetCellValue("NET" + (i + 1).ToString());
                                rw.CreateCell(1).SetCellValue("sub0");
                                ICell ce = rw.CreateCell(n + 2);
                                ce.SetCellValue(res[i][n].ToString());
                            }
                            //跳过length个值
                            j+=(length-1);
                        }
                        else
                        {
                            //新增加一行
                            rowIndex++;
                            int cellIndex = 0;
                            IRow rw1 = sheet.CreateRow(rowIndex);
                            for (int m=0; m < 3; m++)
                            {
                                //判断是否超过了总行数
                                if ((j+m)<count)
                                {
                                    ICell ce1 = rw1.CreateCell(m+ 2);
                                    ce1.SetCellValue(res[i][j+m].ToString());
                                    cellIndex++;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            j+=cellIndex-1;
                        }
                       
                    }
                }
                string saveFileName = "D:\\示例.xlsx";
                try
                {
                    using (FileStream fs = new FileStream(saveFileName, FileMode.Create, FileAccess.Write))
                    {
                        workBook.Write(fs);  //写入文件
                        workBook.Close();  //关闭
                    }
                    MessageBox.Show("导出成功");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message.ToString());
                    workBook.Close();
                }
            }
    

    执行后效果如下。

    img


    有用请采纳哦。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 6月24日
  • 已采纳回答 6月16日
  • 修改了问题 6月15日
  • 创建了问题 6月15日

悬赏问题

  • ¥35 平滑拟合曲线该如何生成
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站