NPOI 操作excel实现多行数据复制功能

  • NPOI 复制多行到其他worksheet中
  • 优化内容
  • 参考链接,可直接点击:

NPOI 复制多行到其他worksheet中

目前NPOI最新版为Version 2.5.6,需要实现sheet1中的多行数据,复制到sheet2中,目前NPOI未提供直接的函数,寻找多种资源,终于在Stack overflow上找到该问题的解决办法,并对其进行优化,得到如下代码!

转载请注明出处!

优化内容

优化主要包括:

  • 增加复制内容中合并单元格处理,即MergeRegion()函数

参考链接,可直接点击:

1.指定行列复制
2.stackoverflow,NPOI 复制范围到另一个工作表
3.中文博客,翻译stackoverflow

 /// <summary>/// 复制选定的区域到指定的sheet,用法举例: sheet1中"A1:H47"到sheet2中,则CopyRange("A1:H47",sheet1,sheet2)/// </summary>/// <param name="str_range"></param>/// <param name="sourceSheetname"></param>/// <param name="destinationSheetName"></param>public void CopyRange(CellRangeAddress range, string sourceSheetname, string destinationSheetName){// CellRangeAddress range = CellRangeAddress.ValueOf(str_range);ISheet sourceSheet = Wb.GetSheet(sourceSheetname);ISheet destinationSheet = Wb.GetSheet(destinationSheetName);if(destinationSheet==null){destinationSheet = Wb.CreateSheet(destinationSheetName);}for (var rowNum = range.FirstRow; rowNum <= range.LastRow; rowNum++){IRow sourceRow = sourceSheet.GetRow(rowNum);if (destinationSheet.GetRow(rowNum) == null)destinationSheet.CreateRow(rowNum);if (sourceRow != null){IRow destinationRow = destinationSheet.GetRow(rowNum);for (var col = range.FirstColumn; col < sourceRow.LastCellNum && col <= range.LastColumn; col++){destinationRow.CreateCell(col);CopyCell(sourceRow.GetCell(col), destinationRow.GetCell(col));}}}MergeRegion(sourceSheet, destinationSheet, range.LastRow, range.LastColumn);}/// <summary>/// 复制某一列/// </summary>/// <param name="column"></param>/// <param name="sourceSheetname"></param>/// <param name="destinationSheetName"></param>void CopyColumn(string column, string sourceSheetname, string destinationSheetName){ISheet sourceSheet = Wb.GetSheet(sourceSheetname);ISheet destinationSheet = Wb.GetSheet(destinationSheetName);int columnNum = CellReference.ConvertColStringToIndex(column);var range = new CellRangeAddress(0, sourceSheet.LastRowNum, columnNum, columnNum);CopyRange(range, sourceSheetname, destinationSheetName);}/// <summary>/// 复制单元格/// </summary>/// <param name="source"></param>/// <param name="destination"></param>void CopyCell(ICell source, ICell destination){if (destination != null && source != null){//you can comment these out if you don't want to copy the style ...destination.CellComment = source.CellComment;destination.CellStyle = source.CellStyle;destination.Hyperlink = source.Hyperlink;switch (source.CellType){case CellType.Formula:destination.CellFormula = source.CellFormula; break;case CellType.Numeric:destination.SetCellValue(source.NumericCellValue); break;case CellType.String:destination.SetCellValue(source.StringCellValue); break;case CellType.Boolean:destination.SetCellValue(source.BooleanCellValue); break;case CellType.Blank:destination.SetCellType(CellType.Blank); break;default:break;}}}/// <summary>/// 复制合并单元格/// </summary>/// <param name="sSheet"></param>/// <param name="dSheet"></param>/// <param name="MaxRow"></param>,源sheet中的最大行/// <param name="MaxCol"></param>,源sheet中的最大列private void MergeRegion(ISheet sSheet, ISheet dSheet, int MaxRow = 10, int MaxCol = 10){int sheetMergerCount = sSheet.NumMergedRegions;for (int i = 0; i < sheetMergerCount; i++){if (sSheet.GetMergedRegion(i).MaxRow <= MaxRow && sSheet.GetMergedRegion(i).MaxColumn <= MaxCol)dSheet.AddMergedRegion(sSheet.GetMergedRegion(i));}}

C# NPOI复制多行到其他worksheet中相关推荐

  1. NPOI导出word,NPOI导出word表格,NPOI复制table表格 XWPFDocument中XWPFTable

    NPOI导出word,NPOI导出word表格,NPOI复制table表格 XWPFDocument中XWPFTable 使用NPOI可以对Word中的文本做替换,当遇到表格时,单个表格也可以循环遍历 ...

  2. js html table转excel文件 js获取(复制 / 粘贴板)的内容js复制table粘贴到excel中

    js html table转excel文件 参考资料: 70行代码实现vue+sheetJs导出excel功能 sheetJs的git项目代码 代码太长建议直接粘贴复制 <!DOCTYPE ht ...

  3. 将磁盘上的一个文本文件的内容复制到另一个文件中

    <程序设计基础实训指导教程-c语言> ISBN 978-7-03-032846-5 p198 8.1.2 上级实训内容 [实训内容2]将磁盘上的一个文本文件的内容复制到另一个文件中 #in ...

  4. 编写程序,在文件file1.dat中存入字符串“good morning”,然后将file1.dat中的内容输出到屏幕上,并复制到文件file2.dat中

    <程序设计基础-c语言>杨莉 刘鸿翔 ISBN-978-7-03-032903-5 p257 习题8 7.编写程序,在文件file1.dat中存入字符串"good morning ...

  5. Git Manual / Git使用手册 / Git, GitLab, Git Bash, TortoiseGit (建议全文复制到Word文档中通过导航窗格查看)...

    Git使用手册 目录 1     引言 2     Git.GitLab简介 2.1      Git 2.2      GitLab 2.3      Git基本概念 3     运行环境 4    ...

  6. 百度ueditor 拖文件或world 里面复制粘贴图片到编辑中 上传到第三方问题

    我这边从world 里面复制粘贴图片到编辑器中,它自动给我上传了,但是我是用的第三方的要设置一个token值,我找了很久,也没有找到应该在哪里设置这个上传的参数,如果是点击图片上传,我知道在dialo ...

  7. DataRow复制一行到另一个DataTable

    DataRow复制一行到另一个DataTable 下面两个方法是DataRow复制一行到另一个DataTable的,直接Add会出错"此行已属于另一个表",其实以前就知道怎么做的, ...

  8. Linux 中如何复制和删除文件夹中的所有文件?

    Linux 中如何复制和删除文件夹中的所有文件? 1.复制文件 目标文件目录必须存在 (1) 直接复制 cp /hone/user/temp/test.c /home/user/ (2) 复制并重命名 ...

  9. Linux复制文件到usb设备中,使用shell脚本实现USB设备的加载与文件复制

    使用shell脚本实现USB设备的加载与文件复制 在Linux操作系统中,如果插入一个USB设备,需要用mount挂载命令才能实现这个设备的加载,下面写一个USB设备挂载与文件复制的Shell程序,程 ...

最新文章

  1. 【经验】向word中插入格式化的代码块
  2. c语言实现椭圆曲线算法,椭圆曲线加密算法的C语言设计和实现
  3. 我来告诉你【Redis】入门 一
  4. 正则 禁止连续逗号_正则
  5. linux 磁盘被挂载2个目录,Linux检测并挂载第二块硬盘的步骤
  6. 理解一下ThreadLocal线程存储---springcloud工作笔记160
  7. mysql 动态游标 , 实际上不要使用, 因为两个人同时执行会删除了其中一个人的数据...
  8. Cad二次开发版本集合2000-2022
  9. C#语言和doNet框架
  10. google实习面试
  11. c语言设计程序计算水仙花数,C语言水仙花数算法
  12. 安卓rom包解包linux,Android rom解包打包工具
  13. 100天精通Andriod逆向——第3天:真机环境配置
  14. linux12.12日学习整理(被逼无奈写的博客)
  15. 翻译:《蛇棋》游戏与算法
  16. linux java 僵尸进程_Linux 系统中僵尸进程
  17. DirectX FAQ 翻译(Graphics 部分)
  18. 七年之痒,很多人迈不过去的槛
  19. MTK Keypad驱动框架
  20. VR视频播放器Video Player

热门文章

  1. 修复受损的Windows账户权限配置
  2. Word如何实现一级标题汉字,二级标题数字
  3. linux 打开文件命令
  4. android弧形左右滑动空间,自定义LayoutManager 实现弧形以及滑动放大效果RecyclerView...
  5. DevOps系列之 —— 持续开发与集成(五)华为云 DevCloud 代码托管服务及 CloudIDE
  6. 路由器中的UPnP状态开启跟关闭有什么区别
  7. 量化交易软件 python_量的解释|量的意思|汉典“量”字的基本解释
  8. 性能一路“狂飙”,阿里云ECS上新啦
  9. [POJ 1417] True Liars
  10. 双目立体视觉数学原理