首页 > 其他分享 >NPOI

NPOI

时间:2022-12-22 18:33:18浏览次数:64  
标签:sheet ICell NPOI CreateCell workbook new SetCellValue

NPOI简介

NPOI就是POI的.NET版本,NPOI能够帮助我们在没有安装微软Office的情况下读写Office文件,如xls, doc, ppt等。

名词介绍

Workbook(工作簿):一个Excel文件
Sheet页:一个工作簿中可包含多个Sheet页

NPOI源码

https://github.com/nissl-lab/npoi

Nuget

install-package NPOI

入门

生成一个Excel文件

using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

{
    //创建工作簿
    using (IWorkbook workbook = new HSSFWorkbook())
    {
        //创建sheet页
        ISheet sheet1 = workbook.CreateSheet("sheet1");
        //创建第一行
        {
            IRow header = sheet1.CreateRow(0);
            //创建单元格
            ICell cell1 = header.CreateCell(0);
            cell1.SetCellValue("ID");
            ICell cell2 = header.CreateCell(1);
            cell2.SetCellValue("姓名");
            ICell cell3 = header.CreateCell(2);
            cell3.SetCellValue("年龄");
            ICell cell4 = header.CreateCell(3);
            cell4.SetCellValue("数学成绩");
            ICell cell5 = header.CreateCell(4);
            cell5.SetCellValue("语文成绩");
        }
        //创建第二行
        {
            IRow row = sheet1.CreateRow(1);
            ICell cell1 = row.CreateCell(0);
            cell1.SetCellValue(1);
            ICell cell2 = row.CreateCell(1);
            cell2.SetCellValue("fan1");
            ICell cell3 = row.CreateCell(2);
            cell3.SetCellValue(18);
            ICell cell4 = row.CreateCell(3);
            cell4.SetCellValue(99.5);
            ICell cell5 = row.CreateCell(4);
            cell5.SetCellValue(100);
        }
        //导出
        var path = Path.Combine(Directory.GetCurrentDirectory(), "test.xls");
        using (var fs = new FileStream(path, FileMode.Create))
        {
            workbook.Write(fs, true);
        }
    }

}

单元格数据格式

在Excel中我们经常要设置格式,比如说日期格式(2018-1-1)、小数点格式(1.20)、货币格式($2000)、百分比格式(99.99%)等等,这些东西在过去我们恐怕只能在服务器端生成好,不但增加了服务器端的代码量,还造成了不必要的字符串替换操作,如今NPOI将让服务器从这种完全没有必要的操作中解放出来,一切都将由Excel在客户端处理。
所有的格式都是通过 CellStyle.DataFormat 赋给单元格的,而不是直接赋给单元格,设置单元格数据展示的格式有两种方法。

excel内部设置了很多格式,如下图所示:

使用内置格式

如果我们想使用这些内置的格式,可用通过 DataFormat.GetBuildinFormat('格式') 来使用,使用实例如下:

cellStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");  //两位小数,内置格式

使用自定义格式

有时候内置的格式不能满足我们的要求,这时候就可以使用 workbook.CreateDataFormat().GetFormat("格式") 自定义格式了,使用语法如下:

cellStyle.DataFormat= workbook.CreateDataFormat().GetFormat("yyyy年m月d日 hh时mm分ss秒");//显示中文日期和时间,自定义格式

数据格式案例

{
    IWorkbook workbook = new HSSFWorkbook();
    ISheet sheet = workbook.CreateSheet("new sheet");
    //设置日期格式,2018年5月5日格式
    ICell cell = sheet.CreateRow(0).CreateCell(0);
    cell.SetCellValue(new DateTime(2018, 5, 5, 11, 31, 56));
    ICellStyle cellStyle = workbook.CreateCellStyle();
    cellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("yyyy年m月d日 hh时mm分ss秒");
    //cellStyle.DataFormat = workbook.CreateDataFormat().GetFormat("yyyy/mm/dd hh:mm:ss"); 
    cell.CellStyle = cellStyle;

    //保留2位小数
    ICell cell2 = sheet.CreateRow(1).CreateCell(0);
    cell2.SetCellValue(12.346666);
    ICellStyle cellStyle2 = workbook.CreateCellStyle();
    cellStyle2.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00");
    cell2.CellStyle = cellStyle2;

    //货币格式
    ICell cell3 = sheet.CreateRow(2).CreateCell(0);
    cell3.SetCellValue(1234.66666);
    ICellStyle cellStyle3 = workbook.CreateCellStyle();
    cellStyle3.DataFormat = workbook.CreateDataFormat().GetFormat("¥#,##0.00");//美元的话格式为 $#,##0.00,其中#,##0表示千分号
    cell3.CellStyle = cellStyle3;

    //百分比
    ICell cell4 = sheet.CreateRow(3).CreateCell(0);
    cell4.SetCellValue(1.236666);
    ICellStyle cellStyle4 = workbook.CreateCellStyle();
    //cellStyle4.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00%");//保留两位小数
    cellStyle4.DataFormat = HSSFDataFormat.GetBuiltinFormat("0%");
    cell4.CellStyle = cellStyle4;

    //中文大写数字
    ICell cell5 = sheet.CreateRow(4).CreateCell(0);
    cell5.SetCellValue(111);
    ICellStyle cellStyle5 = workbook.CreateCellStyle();
    cellStyle5.DataFormat = workbook.CreateDataFormat().GetFormat("[DbNum2][$-804]0.00");//不保留小数: [DbNum2][$-804]0
    cell5.CellStyle = cellStyle5;


    //科学计数法
    ICell cell6 = sheet.CreateRow(5).CreateCell(0);
    cell6.SetCellValue(1234.6666);
    ICellStyle cellStyle6 = workbook.CreateCellStyle();
    cellStyle6.DataFormat = HSSFDataFormat.GetBuiltinFormat("0.00E+00");
    cell6.CellStyle = cellStyle6;

    var path = Path.Combine(Directory.GetCurrentDirectory(), "test1.xls");
    using (FileStream file = new FileStream(path, FileMode.Create))
    {
        workbook.Write(file,true);
    }
}

单元格合并

{
    IWorkbook workbook = new HSSFWorkbook();
    ISheet sheet = workbook.CreateSheet("sheet1");


    sheet.AddMergedRegion(new CellRangeAddress(0, 3, 1, 10));//合并单元格,4个参数依次为为startRow,endRow,startCol,endCol
    ICell cell1 = sheet.CreateRow(0).CreateCell(1);
    cell1.SetCellValue("合并区域1");

    sheet.AddMergedRegion(new CellRangeAddress(5, 8, 0, 10));//合并单元格,4个参数依次为为startRow,endRow,startCol,endCol
    ICell cell2 = sheet.CreateRow(5).CreateCell(0);
    cell2.SetCellValue("合并区域2");


    var path = Path.Combine(Directory.GetCurrentDirectory(), "test2.xls");
    using (FileStream file = new FileStream(path, FileMode.Create))
    {
        workbook.Write(file, true);
    }
}

单元格样式

案例1

           HSSFWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("sheet1");
            
            //------------------单元格合并
            sheet.AddMergedRegion(new CellRangeAddress(1, 2, 1, 5));//合并单元格,4个参数依次为为startRow,endRow,startCol,endCol
            ICell cell = sheet.CreateRow(1).CreateCell(1);
            cell.SetCellValue("合并的区域");
            cell.Row.HeightInPoints = 40;//行高
            ICellStyle cellstyle = workbook.CreateCellStyle();

            //----------------设置单元格常用风格
            cellstyle.Alignment = HorizontalAlignment.Left;//水平居左,可选Right,Center
            cellstyle.VerticalAlignment = VerticalAlignment.Bottom;//垂直居中,可选Top,Center
            cellstyle.WrapText = true;//自动换行

            cellstyle.Indention = 4;//缩进4个字节
            //cellstyle.Rotation = 90;//字体旋转90度,取值范围是[-90,90]

            //---------------字体,字体大小、颜色
            IFont font = workbook.CreateFont();
            font.FontHeightInPoints = 24;//字号为24,可以用font.FontHeight = 24 * 20;FontHeight的单位是1/20点

            font.FontName = "楷体";//字体
            font.Boldweight = 700;//加粗
            font.Color = HSSFColor.Blue.Index;//字体颜色
            cellstyle.SetFont(font);
            cell.CellStyle = cellstyle;
            using (FileStream file = new FileStream(@"D:/TestFiles/test.xls", FileMode.Create))
            {
                workbook.Write(file);
            }

案例2

       IWorkbook workbook = new HSSFWorkbook();
            ISheet sheet = workbook.CreateSheet("sheet1");

            ICell cell = sheet.CreateRow(1).CreateCell(1);
            cell.SetCellValue("hello");
            ICellStyle cellstyle = workbook.CreateCellStyle();
            //设置宽度,把第2列设成20字节宽;参数1指定列的索引;参数2指定宽度,单位是1/256个字符宽度
            sheet.SetColumnWidth(1, 20 * 256);
            //高度设成40,单位是点;也可以用cell2.Row.Height = 40 * 20;Height的单位是1/20点
            cell.Row.HeightInPoints = 40;
            //右边框设置成点画线
            cellstyle.BorderRight = BorderStyle.MediumDashDot;
            //右边框设成粉色
            cellstyle.RightBorderColor = HSSFColor.Pink.Index;
            //前景色填充模式,实心
            cellstyle.FillPattern = FillPattern.SolidForeground;
            //前景色填充颜色,黄色
            cellstyle.FillForegroundColor = HSSFColor.Yellow.Index;
            //背景色
            //cellstyle2.FillBackgroundColor = HSSFColor.Green.Index;//背景色设成green
            cell.CellStyle = cellstyle;

            using (FileStream file = new FileStream(@"D:/TestFiles/test.xls", FileMode.Create))
            {
                workbook.Write(file);
            }

参考:
https://www.cnblogs.com/wyy1234/p/10039767.html

标签:sheet,ICell,NPOI,CreateCell,workbook,new,SetCellValue
From: https://www.cnblogs.com/fanfan-90/p/16999132.html

相关文章

  • pinpoint 安装指南
    tangcheng@ChenTangMINGW64/c/Developer$gitclonehttps://github.com/naver/pinpoint.gitCloninginto'pinpoint'...remote:Enumeratingobjects:51,done.remote:......
  • ExcelToObject.NPOI 两行代码导出Excel报表、读取Excel数据
    简介作为一个dotnet开发者,经常面对业务系统中大量报表导入导出,经常写了一堆的重复代码。最近发现一个操作excel的神器:ExcelToObject.NPOI,两行代码就能导出一个报表,两行代......
  • NPOI word 指定位置插入图片
    如果区域内没有其他内容,直接获取到该段落,插入图片即可,这里指定位置插入图片的需求比较另类,在这里抛砖引玉,这里属于个人的一点思路供大家参考,后续会继续完善。要求:这是一个......
  • Npoi.Mapper 日期转换
    问题:Excel文档里有一些列是日期类型的数据,使用Mapper默认的转换,发现生成的实体,在有的系统环境下能正常转换,但是在有的系统环境下,转换的日期出现中文。猜想是Excel文档里,日......
  • NPOI导出
    1、在服务层安装NPOI包  2、直接在服务层创建.cs文件using引用NPOI3、在Dto中加入Description特性主要用于枚举和属性   4、创建工作簿设置表格中样式以及......
  • .Net Excel操作之NPOI(一)简介
    一、NPOI简介 NPOI是一个开源项目,可以读/写xls,doc,ppt文件,有着广泛的应用。 使用NPOI能够帮助开发者在没有安装微软Office的情况下读写Office97-2003的文件,支持的文件......
  • .Net Excel操作之NPOI(二)常用操作封装
    一、Excel数据导出常用操作1.指定表头和描述2.指定数据库中读出的数据集合二、ExcelExport封装///<summary>///Excel常用的表格导出逻辑封装///单表写入///</s......
  • NPOI Excel导入:时间格式2022/5/26导入变成26-5月-2022
    //NPOI导入日期格式处理stringmytime=dateStr.Trim();//dateStr为Excel导入的日期值IFormatProviderculture=newCultureInfo("zh-CN",true);......
  • 关于NPOI操作(二) 导出数据到文件
        经常收到研发支援单,需要帮客户导出某主题/某活动下某些成百上千的指定用户上传的文件(图片,视频等),本来管理后台是有导出功能的,但是达不到客户心血来潮......
  • 使用AspectJ-@AfterReturning(returning ret),@Around (ProceedingJoinPoint pjp)环绕
    开始使用AspectJ1.[掌握]@AfterReturning后置通知-注解有returning属性在目标方法执行之后执行。由于是目标方法之后执行,所以可以获取到目标方法的返回值。该注解......