使用NPOI处理EXCEL文件:例1-关于优化的一些问题
记得有一次处理Excel文件对比,自己前后使用VBA和NPOI对比了下效率。由于涉及到页面的渲染和刷新,二者的处理速度差了个数量级(10多秒和几十分钟的差别)。当然使用NPOI操作时也做了一定优化。印象这么深刻这次一有需求就想到了NPOI。
需求:财务数据,只挑出最新月份(整数类型,yyyyMM)的数据。然后将数据增加一部分固定列内容按格式写入到另外一张表中。
由于宋丹丹老师把一切复杂的问题都总结为三步:打开冰箱门,把大象塞进去,关上冰箱门。那么我也把这个问题拆分出以下几个三步走
1、打开数据源:
使用NPOI可以打开xls和xlsx类型的,这个没有一点问题
由于使用了wpf,下面也又分为(以下没有什么好说的都是正常代码)
1.1 设置一个按钮
1.2 点击时弹出“打开文件”框
1.3如果选择了文件就获取文件路径。
2、读取数据:
上面获取了文件路径,我们就可以正常打开了。
对于如何读取到合适的数据,我在这里有个优化
先只读取日期列,找出最大日期的那些行。这里我用了一个Dictionary<DateTime, List<int>> 来保存行号。同时记录了一个最大的日期值。通过这点只读取了日期最大的行,会减少读取操作。我觉得这一点
ISheet sheet = workbook.GetSheetAt(0);int cellcount = head.LastCellNum;//一行最多有多少个列long maxRow = sheet.LastRowNum;//页面有多少行Dictionary<DateTime, List<int>> dateRows = new Dictionary<DateTime, List<int>>();var rows = new List<IRow>();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 List<int> { 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);}}
自我总结:一个简单的程序,自顶向下的思路,逐步解决问题。优化要多码,多总结。
相关文章:
使用NPOI处理EXCEL文件:例1-关于优化的一些问题
记得有一次处理Excel文件对比,自己前后使用VBA和NPOI对比了下效率。由于涉及到页面的渲染和刷新,二者的处理速度差了个数量级(10多秒和几十分钟的差别)。当然使用NPOI操作时也做了一定优化。印象这么深刻这次一有需求就想到了NPOI…...
连接k8s和凌鲨
通过连接k8s和凌鲨,可以让研发过程中的重用操作更加方便。 更新容器镜像调整部署规模查看日志运行命令 架构 所有操作通过k8s proxy连接,通过设置namespace label赋予访问权限。只有赋予特定label的namespace才能被访问。 使用步骤 部署k8s proxy 你…...
C语言——结构体的应用
归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言📝 路还在继续,梦还在期…...
人机交互——机器人形态
1.聊天机器人 2.任务型机器人 3.面向FAQ的问答机器人 4.面向KB的问答机器人...
BGP的基础知识
BGP——边界网关协议 IGP——内部网关协议——OSPF、RIP、ISIS EGP——外部网关协议——EGP、BGP 边界网关协议BGP是一种实现自治系统AS之间的路由可达,并选择最佳路由的路径矢量路由协议。目前在IPV4环境下主要使用BGPV4,目前市场上也存在BGPV4&…...
2023.11.18 每日一题(AI自生成应用)【C++】【Python】【Java】【Go】 动态时间序列分析
目录 一、编程挑战:动态时间序列分析 实际应用: 实现提示: 二、实现 1. C 2. Python 3. JAVA 4. Go 一、编程挑战:动态时间序列分析 问题描述: 假设你是一名软件工程师,需要开发一个应用来分析和预…...
uniapp相关记录
一、自定义我的物品组件 my_goods.vue <template><view class"goods-item"><!-- 左侧 --><view class"goods-item-left"><radio :checked"goods.goods_state" color"#c00000" v-if"showRadio" …...
优质猫罐头有哪些品牌?分享5款宠物店自用值得推荐的猫罐头!
不知不觉已经开宠物店7年啦,店里的猫猫大大小小也算是尝试过很多品牌的猫罐头了。优质猫罐头有哪些品牌?在猫罐头的选购上一开始我也是踩了很多坑,各种踩雷。我深知猫罐头的各种门道,新手一不小心就会着道了。 优质猫罐头有哪些品…...
HTML新手入门笔记整理:HTML基本标签
结构标签 <html> </html> 告诉浏览器这个页面是从<html> 开始,到 </html>结束 <head> </head> 网页的头部,用于定义一些特殊内容,如页面标题、定时刷新、外部文件等。 <body> </body> …...
Redis高级特性和应用(发布 订阅、Stream)
目录 发布和订阅 操作命令 发布消息 订阅消息 查询订阅情况 查看活跃的频道 查看频道订阅数 使用场景和缺点 Redis Stream Stream总述 常用操作命令 生产端 消费端 单消费者 消费组 创建消费组 消息消费 在Redis中实现消息队列 基于pub/sub 基于Stream Re…...
RoCE、IB和TCP等网络的基本知识及差异对比
目前有三种RDMA网络,分别是Infiniband、RoCE(RDMA over Converged Ethernet)、iWARP。 其中,Infiniband是一种专为RDMA设计的网络,从硬件级别保证可靠传输 ,技术先进,但是成本高昂。 而RoCE 和 iWARP都是基于以太网的…...
c语言-操作符详解(含优先级与结合性)
文章目录 了解什么是操作数、操作符操作数:操作符 操作符详解:1.算术操作符: 、- 、* 、/ 、%2.移位操作符: << >>3.位操作符: & | ^4. 赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^5. 单⽬操…...
ubuntu安装nvm
需求 在 virtualbox 虚拟机上运行的 ubuntu (22.04.3)里安装 nvm (Node Version Manager) 简述 官网文档 (github地址)上有提到两种安装方式,一种是直接 curl | wget 命令安装,一…...
opengl制作天空盒
首先创建顶点数组 unsigned int m_uiVaoBufferID; glGenVertexArrays(1, &m_uiVaoBufferID); 然后创建顶点缓冲区 float skyboxVertices[] {// positions-1.0f, 1.0f, -1.0f,-1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, -1.0f, -1.0f,1.0f, 1.0f, -1.0f,-1.0f, 1.…...
单片机和FreeRTOS上跑机器人ROS的应用
机器人的应用越来越广泛了,大家熟知的稚晖君直接创业搞机器人,可想而至,接下来的十年,机器人绝对是热门的行业。 目前市面上很多机器人都是基于一套叫做ROS的系统开发的,今天就给大家分享一个跑在MCU上,基…...
Spring Cloud学习(十一)【深入Elasticsearch 分布式搜索引擎03】
文章目录 数据聚合聚合的种类DSL实现聚合RestAPI实现聚合 自动补全拼音分词器自定义分词器自动补全查询completion suggester查询RestAPI实现自动补全 数据同步数据同步思路分析实现elasticsearch与数据库数据同步 集群搭建ES集群创建es集群集群状态监控创建索引库1)…...
【gitlab初始密码登录失败】
gitlab初始密码登录失败 修改密码 修改密码 [rootlocalhost ~]# gitlab-rake "gitlab:password:reset[root]" Enter password: Confirm password: Password successfully updated for user with username root. # 再重新配置gitlab [rootlocalhost ~]# gitlab-ctl…...
2017年全国硕士研究生入学统一考试管理类专业学位联考数学试题——解析版
文章目录 2017 级考研管理类联考数学真题解析一、问题求解(本大题共 5 小题,每小题 3 分,共 45 分)下列每题给出 5 个选项中,只有一个是符合要求的,请在答题卡上将所选择的字母涂黑。真题(2017-…...
2、基础入门——web应用架构搭建漏洞HTTP数据包代理服务器
Web应用环境架构类 开发语言:php、java、python、ASP、ASPX等程序源码:用的人多了,就成CMS了。中间件容器:IIS、Apache、Nginx、Tomcat、Weblogic、Jboos、glasshfish等数据库类型:Access、Mysql、Mssql、Oracle、Red…...
【精选】OpenCV多视角摄像头融合的目标检测系统:全面部署指南&源代码
1.研究背景与意义 随着计算机视觉和图像处理技术的快速发展,人们对于多摄像头拼接行人检测系统的需求日益增加。这种系统可以利用多个摄像头的视角,实时监测和跟踪行人的活动,为公共安全、交通管理、视频监控等领域提供重要的支持和帮助。 …...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...
安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件
在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
