前言

由于在文章【.net core 通过miniexcel库将Excel文件内容分类输出到不同的Excel中】中实现的Excel内容分类不能够保留原来的文件头格式,所以使用NPOI进行优化。NPOI操作Excel的功能比较齐全,能够设置各种样式。

1 NPOI

官方仓库:GitHub - nissl-lab/npoi: a .NET library that can read/write Office formats without Microsoft Office installed. No COM+, no interop.a .NET library that can read/write Office formats without Microsoft Office installed. No COM+, no interop. - GitHub - nissl-lab/npoi: a .NET library that can read/write Office formats without Microsoft Office installed. No COM+, no interop.https://github.com/nissl-lab/npoi

本文章不做使用说明,有需要的可以自行搜索或者去官方仓库查看。

2 做什么?

有如下excel:

需要将表格B列,D列,按照类别输出到不同的excel中,如:将性别为男的所有数据输出到一个excel中。

3 如何做?

1 通过nuget添加依赖

2 上代码

public static void Func(){string path = "G:\\桌面\\测试excel.xlsx";int startcell = 3;List<int> xfcols = new List<int>() { 1, 3 };XSSFWorkbook xssworkbook = new XSSFWorkbook(path);ISheet sheet = xssworkbook.GetSheetAt(0);Dictionary<string, XSSFWorkbook> xfworkbooks = new Dictionary<string, XSSFWorkbook>();foreach(var xfcol in xfcols){for(int i = startcell-1; i <= sheet.LastRowNum; i++){if (sheet.GetRow(i) != null && sheet.GetRow(i).Cells[xfcol] != null && sheet.GetRow(i).Cells[0] != null){if(!xfworkbooks.ContainsKey(xfcol.ToString() + sheet.GetRow(i).Cells[xfcol].StringCellValue)){xfworkbooks.Add(xfcol.ToString() + sheet.GetRow(i).Cells[xfcol].StringCellValue, Getxfworkbook(xfcol, startcell, sheet.GetRow(i).Cells[xfcol].StringCellValue, sheet));}}}}foreach(var xfworkbook in xfworkbooks){using (FileStream file = new FileStream($"G:\\桌面\\SaveXlsx\\{ xfworkbook.Key }.xlsx", FileMode.Create)){xfworkbook.Value.Write(file);file.Close();}}}private static XSSFWorkbook Getxfworkbook(int xfcol, int startcell, string cellvalue, ISheet sheet){XSSFWorkbook _ = new XSSFWorkbook();sheet.CopyTo(_, "sheet1", true, true);ISheet newSheet = _.GetSheetAt(0);int moveStep = 0;for (int i = startcell - 1; i <= newSheet.LastRowNum; i++){if (newSheet.GetRow(i) != null && newSheet.GetRow(i).Cells[xfcol] != null && newSheet.GetRow(i).Cells[0] != null){if (newSheet.GetRow(i).Cells[xfcol].StringCellValue != cellvalue){newSheet.RemoveRow(newSheet.GetRow(i));moveStep--;}else{if(moveStep != 0){newSheet.ShiftRows(i, i, moveStep);}}}}return _;}

3 部分结果展示

4 思路:

a.读取文件,并获取sheet

XSSFWorkbook xssworkbook = new XSSFWorkbook(path);
 ISheet sheet = xssworkbook.GetSheetAt(0);

b.定义获取的分类数据存放的字典,并循环sheet进行分类。

Dictionary<string, XSSFWorkbook> xfworkbooks = new Dictionary<string, XSSFWorkbook>();

for(int i = startcell-1; i <= sheet.LastRowNum; i++)

c.将需要拆分sheet的方法单独定义:Getxfworkbook,根据实际的参数需要,传入对应的参数即可。此方法的主要思路为定义需要保留的行向上移动的行数,不需要保留的删除,需要保留的向上移动即可。主要用到的方法:

newSheet.RemoveRow(newSheet.GetRow(i));

newSheet.ShiftRows(i, i, moveStep);

d.读取已分类的数据xfworkbooks,分别写入不同的文件。

4 备注

代码仅进行简单的功能实现,有细节部分没有完善,可根据自己的实际情况修改即可。

5 补充

将产生的多个文件添加到一个压缩文件中。

     public static void ZipCompress(){//文件存放路径string filesPath = @"C:\\Desktop\\xfworkbooks";//解决中文乱码问题ArchiveEncoding ArchiveEncoding = new ArchiveEncoding();ArchiveEncoding.Default = Encoding.GetEncoding("utf-8");WriterOptions options = new WriterOptions(CompressionType.Deflate);options.ArchiveEncoding = ArchiveEncoding;//存放的路径不能够与读取需要压缩的文件在同一目录下using (var zip = File.OpenWrite("C:\\Desktop\\test.zip"))using (var zipWriter = WriterFactory.Open(zip, ArchiveType.Zip, options)){zipWriter.WriteAll(filesPath, "*", SearchOption.AllDirectories);}}

【.net core 通过NPOI库将Excel文件内容分类输出到不同的Excel中】相关推荐

  1. python 解析下载的二进制Excel文件内容

    先描述一波问题场景: 需求是项目中调接口会下载Excel文件,然后解析出Excel文件中固定行列的值即可.如果直接读取Excel文件,使用xlrd库即可.但是调下载接口返回的二进制的内容~~~,如下: ...

  2. Java多线程读取excel文件_解决springboot 多线程使用MultipartFile读取excel文件内容报错问题...

    springboot项目开启多线程 启动类加注解开启 @EnableAsync,实现类方法加注解 @Async 前端页面 报错信息 java.io.FileNotFoundException: C:\ ...

  3. linux c编程获取excel文件内容,c读取excel文件内容

    如何用C语言实现读取excel文件中的数据呢? 要做的是在Linux环境下使用C语言实现快速读取excel文件并保存成文本格式基本思路 基础实现方法同上篇文章<直接通过ODBC读.写Excel表 ...

  4. R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称、将数据写入Excel文件新的表单(sheet)中、将文件保存为xls文件格式(而不是xlsx)

    R语言write.xlsx函数将数据写入Excel文件:写入Excel文件并自定义表单的名称.将数据写入Excel文件新的表单(sheet)中.将文件保存为xls文件格式(而不是xlsx) 目录

  5. 使用POI读取excel文件内容

    1.前言 项目中要求读取excel文件内容,并将其转化为xml格式.常见读取excel文档一般使用POI和JExcelAPI这两个工具.这里我们介绍使用POI实现读取excel文档. 2.代码实例: ...

  6. 【框架思路】python如何读取excel文件内容?如何获取excel文件的路径及sheet名称?

    转载请注明作者和出处:美二 https://blog.csdn.net/qq_32654897/article/details/88579713 一.背景说明 在自动化项目中,有时候测试用例会放在ex ...

  7. excel 服务器怎么添加文件,本地的Excel文件怎么导入到远端服务器的临时表中

    本地的Excel文件如何导入到远端服务器的临时表中? 现在我有一个excel文件,我想把里面的数据导入到远端服务器中去,但是那边规定不能修改数据库的结构,只能用临时表,那么请问大家,我怎么才能把exc ...

  8. 通用读取Excel文件内容的模板设计

    Excel格式文件是最为常用的文件之一,在我们开发的软件中,一般需要把一些报表或表格导出为Excel格式文件,也需要读取Excel格式文件中表格数据.因此,Excel格式文件也成为不同软件间数据交换的 ...

  9. php读取excel文件_PHP如何读取excel文件内容?

    在PHP中可以使用PHPExcelReader或者PHPExcel来读取Excel文件内容,其读取内容的语句代码如"$objPHPExcel->getActiveSheet()-> ...

最新文章

  1. ASP.NET中文件上传下载方法集合
  2. tomcat项目快速启动设置
  3. kubernetes英语怎么读_陷阱英语单词怎么读?
  4. 云计算及应用课程知识整理
  5. 三星:计划将UTG可折叠面板对外出售
  6. MySQL存储引擎--MyISAM与InnoDB区别
  7. MySQL的Binlog与Redolog
  8. 大型网络整体安装与配置解决方案
  9. python用pip安装numpy清华_安装numpy和matplotlib
  10. 从html提取swf文件,Sothink SWF Catcher(SWF文件捕捉提取工具)V2.7 正式版
  11. dnf自动刷图python_dnf卡盟_【python接口自动化】- openpyxl读取excel数据
  12. java-php-python-springboot网络办公系统计算机毕业设计
  13. 如何通过芯片手册寻找操作GPIO
  14. 计算机网络为什么要分层,从形而上到形而下视角的理解
  15. 【干货#009】小程序如何格式化显示对象数组属性
  16. Collections 的 emptyList()、emptyMap() 、emptySet()
  17. 【并查集】HAOI破译密文
  18. Kubernetes 实战——部署基于 Redis 和 Docker 的留言簿
  19. Swift 网络请求 Moya+RxSwift
  20. html自动获取当前日期,javascript怎么获取当前日期?

热门文章

  1. 基于单片机的光伏电量检测系统的设计-毕设课设protues仿真
  2. 看华为技术专家的500页微服务架构笔记,感觉我格局太小
  3. 光固化3d打印机Mono 2k 6.08寸黑白屏Yooin赤兔切片软件的设置与提高打印成型率技巧
  4. rt-thread应用篇(02)---智能家居DIY项目之使用ESP8266实现onenet平台上报
  5. 英美主要报刊杂志网站大全
  6. 【b站雅思笔记】Charlie有好好学习 - 雅思机经1-7
  7. Mac 窗口管理软件 Spectacle
  8. 【计算机操作系统】- 【考研复试面试题】-汇总大合集
  9. 执法仪app音视频相关
  10. 两极对望:当男人女人遭遇误解