当前位置: 首页 > news >正文

【ArcGIS Pro二次开发】(73):使用NPOI库操作Excel

NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。

NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。

相较于之前使用的Microsoft.Office.Interop.Excel,已经感觉到的优势,一是读写速度较快,虽然小数据量的读写还不是很明显,但数据量上去后还是有差别的。二是Microsoft.Office.Interop.Excel会使用Office软件进行打开Excel的操作,这不仅要求在电脑中安装对应的Office软件,而且如果在程序中断的情况下,后台会保留进程,对后续的读写产生影响(已经不只一次遇到这个问题!)。

因此果断放弃Microsoft.Office.Interop.Excel,准备用NPOI代替。

下面是汇总的NPOI简单操作。


1、获取工作薄IWorkbook
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite);
IWorkbook workbook = new XSSFWorkbook(fs);
2、获取工作表对象ISheet
// 获取sheet,按序号,从0开始
ISheet sheet = workbook.GetSheetAt(0);
// 按名称获取
ISheet sheet = workbook.GetSheet("sheet1");
3、获取工作表的行(第一行)
IRow row = sheet.GetRow(0);
4、获取指定行的单元格
ICell cell = row.GetCell(0);
5、获取并设置单元格样式
// 获取单元格格式
ICellStyle style = cell.CellStyle;
// 设置格式
style.VerticalAlignment=HSSFCellStyle.VERTICAL_TOP  // 靠上
style.VerticalAlignment=HSSFCellStyle.VERTICAL_CENTER  // 居中
style.VerticalAlignment=HSSFCellStyle.VERTICAL_BOTTOM  // 靠下
style.VerticalAlignment=HSSFCellStyle.VERTICAL_JUSTIFY  // 两端对齐
// 自动换行
style.WrapText=true;
// 边框设置
style.BorderBottom=HSSFCellStyle.BORDER_THIN;
style.BorderLeft=HSSFCellStyle.BORDER_THIN;
style.BorderRight=HSSFCellStyle.BORDER_THIN;
style.BorderTop= HSSFCellStyle.BORDER_THIN ;
6、创建工作簿对象
XSSFWorkbook workBook= new XSSFWorkbook();
7、创建工作表对象
XSSFSheet newSheet = (XSSFSheet)workBook.CreateSheet("newSheet");
8、创建工作表的行
XSSFRow newRow = (XSSFRow)newSheet.CreateRow(0);
9、创建单元格
XSSFCell newCell = (XSSFCell)newRow.CreateCell(0);
10、单元格写值
newCell.SetCellValue(1);
11、设置Sheet名称
workBook.SetSheetName(0, "newSheet");
12、获取工作簿中Sheet数量
int count = workBook.NumberOfSheets;
13、保存excel文件
workBook.Write(new FileStream(outFilePath, FileMode.Create, FileAccess.ReadWrite));
14、强制更新计算公式
sheet.ForceFormulaRecalculation = true;
15、完整的写值操作
// 文件路径
string filePath = @"C:\Users\Administrator\Desktop\lab.xlsx";
// 创建文件流
FileStream fs = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
// 打开工作簿
XSSFWorkbook wb = new XSSFWorkbook(fs);
// 获取第一个工作表
ISheet sheet = wb.GetSheet("new");
for (int i = 0; i < 100; i++)
{// 获取第3行(索引从0开始)IRow row = sheet.GetRow(i);for (int j = 0; j < 30; j++){// 获取第5列(索引从0开始)ICell cell = row.GetCell(j);// 设置单元格的值为"新"cell?.SetCellValue("fme");}
}
// 保存工作簿
using FileStream saveFile = new FileStream(filePath, FileMode.Create);
wb.Write(saveFile);
16、单元格合并
// 下面(2,3,4,5)指代的意思为从第3行第4列开始,至第5行第6列进行合并
// 即为“C4:E6”
sheet.AddMergedRegion(new Region(2, 3, 4, 5));
17、设置、获取行高列宽
// 获取当前工程中的所有Layouts
IEnumerable<LayoutProjectItem> layouts = Project.Current.GetItems<LayoutProjectItem>();
// 按名称获取
LayoutProjectItem layoutItem = Project.Current.GetItems<LayoutProjectItem>().FirstOrDefault(item => item.Name.Equals("MyLayout"));
18、获取sheet的行数,列数
// 行数
int rowNum = sheet.LastRowNum;
// 列数
int colNum = sheet.LastRowNum;
19、移动行
// 将第9行到第40行的内容向上移动2格
sheet.ShiftRows(8, 39, -2);
20、取消sheet中的所有合并格
// 获取所有合并区域
List<CellRangeAddress> mergeRanges = sheet.MergedRegions;
// 检查并清除合并区域
for (int i = mergeRanges.Count - 1; i >= 0; i--)
{// 合并格的四至CellRangeAddress region = mergeRanges[i];int firstRow = region.FirstRow;int lastRow = region.LastRow;int firstCol = region.FirstColumn;int lastCol = region.LastColumn;// 判定要处理的区域if (startRow <= firstRow && startCol <= firstCol){for (int row = firstRow; row <= lastRow; row++){for (int col = firstCol; col <= lastCol; col++){if (row != firstRow || col != firstCol){IRow r = sheet.GetRow(row);ICell c = r.GetCell(col);// 如果c是空值,则赋一个默认值c ??= r.CreateCell(col);// 设置拥有合并区域的单元格的值为合并区域的值ICell mergedCell = sheet.GetRow(firstRow).GetCell(firstCol);if (mergedCell != null){c.SetCellValue(mergedCell.StringCellValue); // 可根据需要选择相应的数据类型}}}}// 清除合并区域sheet.RemoveMergedRegion(i);}
}

相关文章:

【ArcGIS Pro二次开发】(73):使用NPOI库操作Excel

NPOI是一个开源的C#读写Excel、WORD等微软OLE2组件文档的项目。 NPOI可以在没有安装Office的情况下对Word或Excel文档进行读写操作。 相较于之前使用的Microsoft.Office.Interop.Excel&#xff0c;已经感觉到的优势&#xff0c;一是读写速度较快&#xff0c;虽然小数据量的读…...

python获取电脑所连接的wifi密码

电脑连接wifi后&#xff0c;很难直观地看到当前连接wifi的密码&#xff0c;需要借助命令行公管局才可以查看到相关信息。 CMD命令 查看所有已保存的wifi配置信息 netsh wlan show profiles查看某一个wifi的详细信息&#xff0c;需要输入wifi名称来查询 netsh wlan show pro…...

动态壁纸软件Live Wallpaper HD mac中文版功能特色

Live Wallpaper HD mac提供了一系列美丽的主题场景&#xff0c;将为您的桌面增添活力。从城市景观、日落到遥远的星系&#xff0c;每个屏幕都有特别的触感&#xff0c;可以定制您的天气小部件和时钟样式&#xff0c;并使用您喜爱的图片创建您自己的个性化壁纸。 Living Wallpap…...

Spring Boot 配置主从数据库实现读写分离

一、前言 现在的 Web 应用大都是读多写少。除了缓存以外还可以通过数据库 “主从复制” 架构&#xff0c;把读请求路由到从数据库节点上&#xff0c;实现读写分离&#xff0c;从而大大提高应用的吞吐量。 通常&#xff0c;我们在 Spring Boot 中只会用到一个数据源&#xff0…...

【MongoDB】索引 - 单字段索引

MongoDB支持在集合文档中的任意字段上创建索引&#xff0c;默认情况下所有的集合都有一个_id字段的索引&#xff0c;用户和应用可以新增索引用于查询和操作。 一、准备工作 这里准备一些学生数据 db.students.insertMany([{ _id: 1, name: "张三", age: 20, clas…...

评估大型语言模型:综述

论文地址&#xff1a;https://arxiv.org/pdf/2310.19736v2.pdf github&#xff1a; tjunlp-lab/awesome-llms-evaluation-… 发表团队&#xff1a;Tianjin University 摘要 将LLM评估划分三点&#xff1a;知识和能力评估、一致性评估和安全性评估。特定领域化评估benchmark评…...

设计模式之工厂模式(Factory)

任何可以产生对象的方法或类&#xff0c;都可以称为工厂。 下面的代码定义了Car这种交通工具: public class Car {public void go() {System.out.println("Car go wuwuwuwuw....");} }然后在main函数里面想要调用调用Car的go方法&#xff0c;就需要new一个car对象&…...

2023/11/6 JAVA学习

处理编译异常的两种方法 第一种 第二种 问题比较容易犯,编译时异常...

Android-JobService

JobService 这里写目录标题 JobService一、API详解1 onStartJob2 onStopJob 二、onStartJob | onStopJob 返回值case 1case 2case 3 ref: 深入理解JobScheduler与JobService的使用 - 掘金 (juejin.cn) (28条消息) JobService的使用介绍_TechMerger的博客-CSDN博客 (28条消息) J…...

GraphQL入门与开源的GraphQL引擎Hasura体验

背景 Hasura 是一个开源的 GraphQL 引擎&#xff0c;它可以帮助开发人员快速构建和部署现代应用程序的后端。它提供了一个自动化的 GraphQL API &#xff0c;可以直接连接到现有的数据库&#xff0c;并提供实时数据推送和订阅功能。 Hasura 团队总部位于印度。 下载安装 脚本…...

Javascript知识点详解:this关键字的指向问题

目录 this 关键字 涵义 实质 使用场合 使用注意点 避免多层 this 避免数组处理方法中的 this 避免回调函数中的 this 绑定 this 的方法 Function.prototype.call() Function.prototype.apply() Function.prototype.bind() 箭头函数中的 this this 关键字 涵义 t…...

数据库的备份和恢复

备份&#xff1a;完全备份&#xff0c;增量备份 完全备份&#xff1a;将整个数据库完整的进行备份 增量备份&#xff1a;在完全备份基础的之上&#xff0c;对后续新增的内容进行备份 备份的需求 1生产环境中&#xff0c;数据的安全性至关重要&#xff0c;任何数据都可能产生非…...

DS图—图非0面积/bfs【数据结构】

DS图—图非0面积 题目描述 编程计算由"1"围成的下列图形的面积。面积计算方法是统计"1"所围成的闭合曲线中"0"点的数目。如图所示&#xff0c;在10*10的二维数组中&#xff0c;"1"围住了15个点&#xff0c;因此面积为15。 提示&…...

Wnmp服务安装并结合内网穿透实现公网远程访问——“cpolar内网穿透”

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 WNMP是Windows系统下的绿色NginxMysqlPHP环境集成套件包&#xff0c;安装完成后即可得到一个Nginx MyS…...

2023版Pycharm关闭一直显示closing project,正在关闭项目

点击 帮助 下的 查找操作 英文版为 Help 下的 Find Action 输入 Registry 禁用 ide.await.scope.completion 即可 PS&#xff1a;按 Ctrl F 输入可以快速检索...

Gradle笔记 二 Gradle的基础Groovy

学习Groovy的必要性 首先Gradle是由Groovy写成的&#xff0c;而且构建脚本的语法都遵循Groovy的语法&#xff0c;所以要学好Gradle的前提是要基本了解Groovy的语法。 Groovy 简介 在某种程度上&#xff0c;Groovy可以被视为Java的一种脚本化改良版,Groovy也是运行在JVM上&am…...

浅谈剩余电流动作继电器在电动伸缩门的应用

摘 要&#xff1a;随着时代的发展&#xff0c;越来越多的小区、厂区、园区和学校等场所的大门安装了电动伸缩门&#xff0c;几乎可以说随处可见。电动伸缩门是一种长期在户外使用的设备&#xff0c;工作电压为220 V&#xff08;过去也有380 V&#xff09;&#xff0c;其电机是处…...

stable diffusion安装踩坑之clip安装、git报错

clip本地安装环境链接问题 本节主要记录一下在windows安装stable diffusion时&#xff0c;clip脚本安装不上&#xff0c;本地安装时如何链接到当前库的问题 首先&#xff0c;在脚本安装clip不成功时&#xff0c;脚本会输出一个commend指令&#xff0c;复制到浏览器就可以很快…...

colmap gpu服务器安装

1.官方安装说明 https://colmap.github.io/install.html 后边有编译支持gpu的步骤&#xff01;&#xff01;&#xff01; 2.sudo apt-get install libgtest-dev 3.cmakelists.txt 250行 set(CMAKE_CUDA_ARCHITECTURES “native”) 4. sudo apt-get install libqt5core5a sud…...

linux内的循环

格式 while 【 条件判断 】 do 语句体 done 上图 第一次代码&#xff0c;输入语句在外面&#xff0c;结果输入完&#xff08;非hello&#xff09;程序不断循环&#xff0c;没办法&#xff0c;ctrlc给程序终止了&#xff0c;然后把用户输入的语句放到了循环体里面…...

强化学习(RL)的学习笔记

1. 前言 &#xff08;1&#xff09;PPO的优点 PPO&#xff08;Proximal Policy Optimization&#xff09;算法相比其他强化学习方法有几个显著优点&#xff1a; 稳定性和鲁棒性&#xff1a;PPO通过限制策略更新的幅度来避免训练过程中的大幅波动&#xff0c;这增加了算法的稳…...

2023世界传感器大会开幕,汉威科技多领域创新产品引瞩目

11月5日&#xff0c;2023世界传感器大会在郑州国际会展中心正式拉开帷幕。据悉&#xff0c;本次大会由河南省人民政府、中国科学技术协会主办&#xff0c;郑州市人民政府、河南省工业和信息化厅、河南省科学技术协会、中国仪器仪表学会承办。 大会由“一会一赛一展”组成&#…...

什么是机器学习中的正则化?

1. 引言 在机器学习领域中&#xff0c;相关模型可能会在训练过程中变得过拟合和欠拟合。为了防止这种情况的发生&#xff0c;我们在机器学习中使用正则化操作来适当地让模型拟合在我们的测试集上。一般来说&#xff0c;正则化操作通过降低过拟合和欠拟合的可能性来帮助大家获得…...

PostgreSQL JDBC连接详解(附DEMO)

PostgreSQL JDBC连接详解 PostgreSQL JDBC连接详解摘要引言1. JDBC基础1.1 JDBC简介1.2 JDBC驱动程序1.3 建立JDBC连接 2. 配置PostgreSQL JDBC连接2.1 PostgreSQL连接JDBC2.2 PostgreSQL连接JDBC是否成功2.3 PostgreSQL连接JDBC获取表信息注释等2.4 PostgreSQL连接JDBC根据表名…...

学习视频剪辑:巧妙运用中画、底画,制作画中画,提升视频效果

随着数字媒体的普及&#xff0c;视频剪辑已经成为一项重要的技能。在视频剪辑过程中&#xff0c;制作画中画可以显著提升视频效果、信息传达和吸引力。本文讲解云炫AI智剪如何巧妙运用中画、底画批量制作画中画来提升视频剪辑水平&#xff0c;提高剪辑效率。 操作1、先执行云…...

Android Studio代码无法自动补全

Android Studio代码自动无法补全问题解决 在写layout布局文件时&#xff0c;代码不提示&#xff0c;不自动补全&#xff0c;可以采用如下方法&#xff1a; 点击File—>Project Structure&#xff0c;之后如图所示&#xff0c;找到左侧Modules&#xff0c;修改SDK版本号&…...

从零开始搭建微服务

人狠话不多,直接开始少点屁话本着共同学习进步的目的和大家交流如有不对的地方望铁子们多多谅解 准备工具 开发工具 idea Java环境 jdk.18 Maven 3.8.6 仓库镜像阿里云 <mirror><id>alimaven</id><name>aliyun maven</name><url>https:…...

HF Hub 现已加入存储区域功能

我们在 企业版 Hub 服务 方案中推出了 存储区域&#xff08;Storage Regions&#xff09; 功能。https://hf.co/enterprise 通过此功能&#xff0c;用户能够自主决定其组织的模型和数据集的存储地点&#xff0c;这带来两大显著优势&#xff0c;接下来的内容会进行简要介绍&…...

linux下实现电脑开机后软件自启动

实现linux的软件自启动&#xff0c;需要四个文件 第一个【displayScreen.desktop】文件&#xff0c;.desktop文件就是一个用来运行程序的快捷方式,也叫启动器&#xff0c;常用来自启动用的文件&#xff0c;内容如下 [Desktop Entry] #要执行的脚本位置 Exec/home/yicaobao/te…...

【C/PTA】循环结构进阶练习(二)

本文结合PTA专项练习带领读者掌握循环结构&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 7-1 二分法求多项式单根 二分法求函数根的原理为&#xff1a;如果连续函数f(x)在区间[a,b]的两个端点取值异号&#xff0c;即f(a)f(b)<0…...