首页 > 其他分享 >基于NPOI封装支持多级表头灵活读写的《Soul.XLS》库

基于NPOI封装支持多级表头灵活读写的《Soul.XLS》库

时间:2024-08-21 15:49:35浏览次数:10  
标签:ExcelColumn style Soul NPOI workbook 表头 var new row

一、先上效果图

二、上代码

  • dotnet add package Soul.XLS --version 1.1.0
//构造一个多级表头
var columns = new ExcelColumnCollection("学生信息")
{
  new ExcelColumn("学生信息")
  {
      Items = new []
      {
          new ExcelColumn("个人信息")
          {
              Items = new []
              {
                  new ExcelColumn("姓名"),
                  new ExcelColumn("生日", style =>
                  {
                      style.ColumnWidth = 14;//可以在叶子节点给整列设置样式
                      style.Alignment = HorizontalAlignment.Center;
                  }),
              }
          },
          new ExcelColumn("家庭信息")
          {
              Items = new []
              {
                  new ExcelColumn("地址"),
                  new ExcelColumn("电话"),
              }
          },
      }
  },
  new ExcelColumn("成绩信息")
  {
      Items = new []
      {
          new ExcelColumn("文综")
          {
              Items = new []
              {
                  new ExcelColumn("语文"),
                  new ExcelColumn("历史"),
              }
          },
          new ExcelColumn("理综")
          {
              Items = new []
              {
                  new ExcelColumn("数学",style=>
                  {
                      style.Format = "0.00";
                  }),
                  new ExcelColumn("物理"),
              }
          }
      }
  }
};
//创建数据table
var table = new ExcelTable("学生信息");
//应用表头
table.ApplyHeaders(columns);
//设置窗口冻结
table.FreezePanes(4, 1);
for (int i = 0; i < 100; i++)
{
    var row = table1.NewRow();
    row["姓名"] = "花间岛" + i;
    row["生日"] = DateTime.Now.ToString();
    row["地址"] = "浙江杭州";
    row["电话"] = "10086";
    row["语文"] = 100;
    row["历史"] = 50;
    row["数学"] = 99;
    row["物理"] = 97;
    table1.Rows.Add(row);
}
var workbook = new ExcelWorkbook();
workbook.Tables.Add(table);//支持多个sheet
workbook.SaveToFile("D:\\demo.xlsx", ExcelFileType.Xlsx);

三、高级玩法,基于ISheet扩展

var table = new ExcelTable("消费信息");
table.ApplyHeaders(new ExcelColumnCollection("消费信息")
{
    new ExcelColumn("商品",style=>
    {
        style.Alignment = HorizontalAlignment.Center;
    }),
    new ExcelColumn("图片",c=>
    {
        c.ColumnWidth = 20 ;
    }),
    new ExcelColumn("价格"),
});
for (int i = 0; i < 10; i++)
{
    var row = table.NewRow();
    row.Height = 800;
    row["商品"] = "哇哈哈";
    row["价格"] = 15.2;
    row["图片"] = Image.Load("D:\\t.png");
    table.Rows.Add(row);
}
var workbook = new ExcelWorkbook(ExcelFileType.Xlsx);
var sheet = workbook.CreateSheet();
//插入到Sheet,并指定起始单元格
sheet.InsertTable(table,1,1);

//在105行插入一行
sheet.SetRow(105, row =>
{
    //插入合计
    row.SetCell(0, (cell, style) => 
    {
        cell.SetData("合计");
        style.Alignment = HorizontalAlignment.Right;
    });
    row.SetCell(0, (cell, style) => 
    {
        cell.SetData(200.00);
        style.Alignment = HorizontalAlignment.Right;
    });
});

workbook.SaveToFile("D:\\demo2.xlsx");

四、读取数据

 var workbook = new ExcelWorkbook();
 workbook.LoadFormFile("D:\\demo3.xlsx");
 var sheet = workbook.GetSheet(0);
 //提取sheet中存在字段名的列
 var table1 = workbook.ExportTable(sheetIndex: 0, firstRow: 3, firstColumn: 0, columnCount: 4);
 foreach (var item in table1.Rows)
 {
     var a1 = item.GetValue<decimal?>("语文");
     var a2 = item.GetValue<decimal>("历史");
     var a3 = item.GetValue<decimal>("数学");
     var a4 = item.GetValue<DateTime>("生日");
 }
 //提取sheet中没有字段名的table,那么我们可以虚拟出来一个columns来进行读取
 var columns = new ExcelColumnCollection()
 {
     new ExcelColumn("姓名"),
     new ExcelColumn("生日"),
     new ExcelColumn("地址"),
     new ExcelColumn("电话"),
     new ExcelColumn("语文"),
     new ExcelColumn("历史"),
     new ExcelColumn("数学"),
     new ExcelColumn("物理"),
 };
 var table2 = workbook.ExportTable(0, columns, 4);
 foreach (var item in table1.Rows)
 {
     var a1 = item.GetValue<decimal?>("语文");
     var a2 = item.GetValue<decimal>("历史");
     var a3 = item.GetValue<decimal>("数学");
     var a4 = item.GetValue<DateTime>("生日");
 }

标签:ExcelColumn,style,Soul,NPOI,workbook,表头,var,new,row
From: https://www.cnblogs.com/chaeyeon/p/18371800

相关文章

  • EasyExcel数据导出实现、动态表头生成、SpringBoot3框架
    1、引入EasyExcel依赖<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version></dependency>2、定义ExcelModel表单模型publicclassExcelMod......
  • 层高不等多层表头
    其他样式报表–层高不等多层表头概述层高不等多层表头:层高不等的多层表头报表。应用场景如下图所示,简单展示数据示例说明数据准备在数据面板中添加数据集,可选择Json数据集和Http接口数据集,Json数据如下图所示:[{"CustomerID":"HUNGC","CompanyName":"五金机械","Con......
  • vue element-ui表格table 表格动态 添加行、删除行、添加列、删除列 自定义表头
       vuetable表格动态添加行、删除行、添加列、删除列自定义表头; 增加一行、删除一行、添加一列、删除一列;每行带输入框input代码1、HTML部分:<template><divclass="app-container"><el-table:data="tableData"borderstyle="width:600px;margin-top:2......
  • Django导出EXCEL并确保表头左右两列显示
    以下是导出EXCEL确保表头左右两列显示正确值的代码示例:fromopenpyxlimportWorkbookfromopenpyxl.stylesimportAlignment#创建一个新的工作簿和工作表wb=Workbook()ws=wb.active#模拟订单头信息(替换为您的实际数据获取方法)order_header={'od_no':'SO......
  • Npoi 复制行的问题记录
    最近在做Excel模板数据导出,要求在Excel展示数据分页结果,做分页时发现npoi复制行有个bug【这种情况并不会百分百复现,sheet.CopyRow,备注下面的那一列还是会正常被复制显示完整的】,本来第一行的文字在A1下是可以完全显示的,但是复制的第二页之后,就不会完整显示了,如下经过调查,原因是......
  • element el-table 设置行高 和表头高度
    https://blog.csdn.net/m0_71645665/article/details/139296035<divstyle="height:90%;overflow-y:scroll"><el-table:data="tableData"style="width:100%;"row-key="id"border:default-expan......
  • 固定表头和首列,防抖节流
    <style>#SetLimitAddtd{line-height:20px;padding-top:5px;padding-bottom:5px;}#wrapper{}.container-fluid{width:1747px;/*实际显示区域*/overflow-x:auto;padding-right:auto;......
  • python使用flask框架生成excle返回前端(包含图片、表格、表头灰色、表格加边框)
    python使用flask框架生成excle文档,文档中包含图片和表格,其中表格要包含图片、表格、表头灰色、表格加边框,照片和表格不重叠。逻辑:获得图片的高度,根据高度计算表格从第几行开始插入。效果图:代码:importopenpyxlfromopenpyxl.stylesimportPatternFillfromopenpyxl.d......
  • EasyExcel 自定义表头颜色
    publicvoidexport(ObjectDTOdto,HttpServletResponseresponse){try{if(ObjectUtils.isEmpty(dto.getObjNumberList())){thrownewBusinessException("编号不允许为空");}ListRespresult=o......
  • 如何实现ElementUI动态表头?
    可能看到这个标题,有些小伙伴会有些疑惑,动态表头是个什么东西,怎么没听说过?其实动态表头在企业的项目中用途还是非常广泛的,比如erp系统什么的那么动态表头是什么呢?说简单点就是让ElementUI的Table表格可以实现自定义表头展示+表头拖拽排序的一个功能这个东西我们肯定有很多小......