霸县网站建设山东网站营销seo电话
news/
2025/10/5 6:03:58/
文章来源:
霸县网站建设,山东网站营销seo电话,wordpress图片库,公众号开发是不是网站开发记得有一次处理Excel文件对比#xff0c;自己前后使用VBA和NPOI对比了下效率。由于涉及到页面的渲染和刷新#xff0c;二者的处理速度差了个数量级#xff08;10多秒和几十分钟的差别#xff09;。当然使用NPOI操作时也做了一定优化。印象这么深刻这次一有需求就想到了NPOI…记得有一次处理Excel文件对比自己前后使用VBA和NPOI对比了下效率。由于涉及到页面的渲染和刷新二者的处理速度差了个数量级10多秒和几十分钟的差别。当然使用NPOI操作时也做了一定优化。印象这么深刻这次一有需求就想到了NPOI。
需求财务数据只挑出最新月份整数类型,yyyyMM的数据。然后将数据增加一部分固定列内容按格式写入到另外一张表中。
由于宋丹丹老师把一切复杂的问题都总结为三步打开冰箱门把大象塞进去关上冰箱门。那么我也把这个问题拆分出以下几个三步走
1、打开数据源
使用NPOI可以打开xls和xlsx类型的这个没有一点问题
由于使用了wpf下面也又分为以下没有什么好说的都是正常代码 1.1 设置一个按钮 1.2 点击时弹出“打开文件”框 1.3如果选择了文件就获取文件路径。
2、读取数据
上面获取了文件路径我们就可以正常打开了。
对于如何读取到合适的数据我在这里有个优化
先只读取日期列找出最大日期的那些行。这里我用了一个DictionaryDateTime, Listint 来保存行号。同时记录了一个最大的日期值。通过这点只读取了日期最大的行会减少读取操作。我觉得这一点 ISheet sheet workbook.GetSheetAt(0);int cellcount head.LastCellNum;//一行最多有多少个列long maxRow sheet.LastRowNum;//页面有多少行DictionaryDateTime, Listint dateRows new DictionaryDateTime, Listint();var rows new ListIRow();for (int i 1; i maxRow; i)//第一行是标题行忽略{var row sheet.GetRow(i);var cell row.GetCell(0);//日期行数据形式yyyyMMif (cell ! null){var num(int) cell.NumericCellValue;var year num / 100;var mon num% 100;var day 1;var date new DateTime(year, mon, day);if (dateRows.Keys.Contains(date)){dateRows[date].Add(i);}else{dateRows.Add(date, new Listint { i });}}}
3、写入并保存文件
由于单元格有一定格式我想了一个取巧的办法-使用一个文件模板保存的时候另存文件。
在数据写入的时候又发现了一个优化点。有20多行他们之前是可以采用循环来赋值的。 //表1的第10行到34对应表2的第18到42行数据格式也一致完美。for (int j 9, k 17; j 34; j, k){if (srcRow.Cells[j].CellType CellType.Numeric){row.CreateCell(k).SetCellValue(srcRow.Cells[j].NumericCellValue);}}
自我总结一个简单的程序自顶向下的思路逐步解决问题。优化要多码多总结。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927888.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!