C#接入 NPOI

时间:2022-10-18 12:52:53

前言

NPOI是指构建在POI 3.x版本之上的一个程序,NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。
NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目
https://github.com/nissl-lab/npoi

NPOI的优势
1、完全免费的
2、涵盖 Excel 的大部分功能(单元格样式、数据格式、公式等)
3、支持的格式:xls、xlsx、docx。
4、设计为面向接口(查看 NPOI.SS 命名空间)
5、 不仅支持导出,还支持导入
6、全球真实成功案例
7、大量的基本示例 https://github.com/nissl-lab/npoi-examples
8、适用于 Windows 和 Linux

下载库

打开vs或者rider的NuGet面板
下载Npoi,如下图所示
C#接入 NPOI
注意,Npoi目前好像只支持.NetFramework 2.x和.NetFramework 4.x,所以如果是使用Unity引擎来操作Npoi的话,记得下载.NetFramework4.x的开发库。
下载完成后如下图所示:
C#接入 NPOI
注意,虽然我们下载的是NPOI,但是其实它这个库是有依赖库的,我们看到SharpZiplib和Portable.BouncyCastle都是NPOI的依赖库,所以,如果我们希望导入Unity或者Unreal使用的话,一定要这三个库同时拷贝。否则在Unity或Unreal中,NPOI会报错,提示找不到xxxx引用。
如果你不方便下载或者因为各种原因的话,那么可以从我的demo中下载,我这都是最新的库。
https://github.com/passiony/npoi_unity_plugins

Exce基本读

using NPOI.SS.UserModel;
namespace ReadAndPrintData
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.OutputEncoding = System.Text.Encoding.UTF8;
            var workbook = WorkbookFactory.Create("data.xlsx");
            ISheet sheet = workbook.GetSheetAt(0);
            foreach (IRow row in sheet)
            {
                for (var i = 0; i < row.LastCellNum; i++)
                {
                    var cell = row.GetCell(i);
                    if (cell != null)
                    {
                        Console.Write(cell.ToString());
                        Console.Write("\t");
                    }
                }
                Console.WriteLine();
            }
            Console.Read();
        }
    }
}

Excel写

using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System.IO;

namespace NPOI.Examples.XSSF.SetCellValuesInXlsx
{
    class Program
    {
        static void Main(string[] args)
        {
            IWorkbook workbook = new XSSFWorkbook();
            ISheet sheet1 = workbook.CreateSheet("Sheet1");
            sheet1.CreateRow(0).CreateCell(0).SetCellValue("This is a Sample");

            int x = 1;

            for (int i = 1; i <= 15; i++)
            {
                IRow row = sheet1.CreateRow(i);
                for (int j = 0; j < 15; j++)
                {
                    row.CreateCell(j).SetCellValue(x++);
                }
            }

            FileStream sw = File.Create("test.xlsx");
            workbook.Write(sw);
            sw.Close();
        }
    }
}

其他操作

其他操作,我就不一一列举了,官方提供的有example仓库。里面有各种版本,各种示例的demo可供参考。
请参考https://github.com/nissl-lab/npoi-examples
文件夹解释

文件夹名 解释
SS Excel 2003(xls) 和 Excel 2007+(xlsx) 的通用示例
HSSF Excel 97-2003,xls示例
XSSF Excel 2007(xlsx) 示例
XWPF Word 2007(docx)示例
POIFS OLE2/ActiveX 文档示例
OOXML OpenXml 格式低级示例
ScratchPad/HWPF Word 2003(文档)示例

希望这篇文章可以对你有所帮助