POI(excel)中ROW应用实践应用总结

简介: POI(excel)中ROW应用实践应用总结

row : 电子表格中行的高级表现形式,只有拥有cell的row才应该被添加进sheet(not forbid);

row index 从 0 开始。即,rowNum 从 0 开始。

HSSFSheet sheetFirst = hssfWorkbook.getSheetAt(0);

(1)获取实际存在的有效的row 数量

即,row不为null,即使某行row中cell内容为空格,row同样有效!

int physicalNumberOfRows = sheetFirst.getPhysicalNumberOfRows();

(2)得到有效的最后一行rowNum

int lastRowNum = sheetFirst.getLastRowNum();

注意区分getPhysicalNumberOfRows();和getLastRowNum();。前者为sheet中实际意义上存在的row,后者为sheet中最后一行rowNum。


需要说明的是,如果sheet为空,即没有实际意义上的row。那么二者都会返回0。但是如果只有一行,前者返回 1 ,后者返回0。

故,使用getLastRowNum()的前提是sheet至少有两行有效数据,才能说明数据的正确性!!!

(3)得到有效的第一行的rowNum

int firstRowNum = sheetFirst.getFirstRowNum();

得到第一个有效行的rowNum。

和上面获取最后一行rowNum存在同样问题:

如果只有一行且该行在第一行,那么其返回 0 ;但是如果sheet为空,其同样返回为 0 。

使用需谨慎,判断sheet为空建议使用getPhysicalNumberOfRows()

(4)根据rowNum创建row

HSSFRow row = sheetFirst.createRow(rowNum);

(5)根据rowIndex 获取row

HSSFRow row = sheetFirst.getRow(ronIndex);

(6)移除指定row

即,移除该行所有cell和row自身对象。

HSSFRow row = sheetFirst.getRow(1);
sheetFirst.removeRow(row);

移除后,row将会变成null;getPhysicalNumberOfRows();将会 减 1。

(7)获取表格打开时,可见的第一行rowNum

short topRow = sheetFirst.getTopRow();

如下图所示,此时topRow = 1;实际上有效的第一行index为0,只是被隐藏了。

int firstRowNum = sheetFirst.getFirstRowNum();
//此时 firstRowNum = 0 !
int physicalNumberOfRows = sheetFirst.getPhysicalNumberOfRows();
//此时 physicalNumberOfRows  = 2 !

20170623093613280.png

(8)移动row,移动some row–只copy 单元格值和单元格样式,不改变行高

Parameters:

  • startRow the row to start shifting
  • endRow the row to end shifting
  • n the number of rows to shift
  • 最后一句话意思是:rows需要移动的行数,为正,则向下移动;为负则向上移动

区间:完全闭区间[startRow,endRow]。

startRow,endRow均代表index(rowNum),基数为0。

sheetFirst.shiftRows(startRow, endRow, n);
//等价于
sheetFirst.shiftRows(startRow, endRow, n, false, false);
//等价于
sheetFirst.shiftRows(startRow, endRow, n, false, false,true);

示例一

如 startRow= 1,endRow = 3,n = 2。则表示将 2-4行向下移动两行,结果是第二行覆盖第4行,第三行覆盖第5行,第四行覆盖第6行,原第二行变为空行(row!=null ,即,row有效但cell为null),。

int startRow=1;
int endRow = 3;
int n=2;
sheetFirst.shiftRows(startRow, endRow, n);

20170623120800926.png

20170623120809385.png

如果移动范围超出了sheet中row的有效范围,将会在移动目标行创建新行:

示例二

int startRow=4;
int endRow = 6;
int n=8;
sheetFirst.shiftRows(startRow, endRow, n);

20170623114558490.png

20170623114630643.png

此时 sheet有效row数量仍为7!!

如果移动一不存在的row到sheet有效row范围外,相当于创建了一cell为null的row(row != null),此时getPhysicalNumberOfRows()+1。

如果移动一不存在的row到sheet有效row范围内,那么目标位置row将会被覆盖(cell变为null),此时getPhysicalNumberOfRows()不变。


向上移动时需要注意,rowNum最小值(基数)为0。也就意味着你不能移动到 rowNum = -1的位置。

示例三

第2-4行向上移动一行,原第4行变为空行(row !=null ,cell 为 null)。

int startRow=1;
int endRow = 3;
int n=-1;
sheetFirst.shiftRows(startRow, endRow, n);

20170623122304105.png

20170623122327541.png

原第四行(rowNum=3)如下图所示;


(9)移动行的时候选择是否更改行高

Parameters:

  • startRow the row to start shifting
  • endRow the row to end shifting
  • n the number of rows to shift
  • copyRowHeight whether to copy the row height during the shift
  • resetOriginalRowHeight whether to set the original row’s height to the default
sheetFirst.shiftRows(startRow, endRow, n, copyRowHeight, resetOriginalRowHeight);

示例 :

int startRow=1;
int endRow = 3;
int n=-1;
sheetFirst.shiftRows(startRow, endRow, n, true, true);

20170623124523102.png

如下图所示,移动过程中附带了行高,且将原始行(被移动的行)设置了默认行高(因为234行中只有4行没有被覆盖,故第4行设置默认行高):

10)移动的时候在9的基础上增加是否同时移动单元格增加的注释

sheetFirst.shiftRows(startRow, endRow, n, copyRowHeight, resetOriginalRowHeight, moveCom

示例:

int startRow=1;
int endRow = 3;
int n=8;
sheetFirst.shiftRows(startRow, endRow, n, true, true, true);

示例:

int startRow=1;
int endRow = 3;
int n=8;
sheetFirst.shiftRows(startRow, endRow, n, true, true, true);

20170623130218063.png20170623130453672.png


目录
相关文章
|
2月前
|
Java BI API
Java Excel报表生成:JXLS库的高效应用
在Java应用开发中,经常需要将数据导出到Excel文件中,以便于数据的分析和共享。JXLS库是一个强大的工具,它基于Apache POI,提供了一种简单而高效的方式来生成Excel报表。本文将详细介绍JXLS库的使用方法和技巧,帮助你快速掌握Java中的Excel导出功能。
81 6
|
3月前
|
前端开发 JavaScript Java
导出excel的两个方式:前端vue+XLSX 导出excel,vue+后端POI 导出excel,并进行分析、比较
这篇文章介绍了使用前端Vue框架结合XLSX库和后端结合Apache POI库导出Excel文件的两种方法,并对比分析了它们的优缺点。
1214 0
|
3月前
|
Java Apache
Apache POI java对excel表格进行操作(读、写) 有代码!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
106 0
|
8月前
|
文字识别
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法
该软件是一款OCR身份证识别工具,能批量处理图片,自动提取身份证信息并导出为Excel。支持百度网盘和腾讯云盘下载。用户界面直观,操作简单,适合新手。识别过程包括:打开图片、一键识别、导出结果。特别注意,此程序仅适用于身份证识别,不适用于其他类型的图片识别。
324 1
分享:如何ocr识别身份证复印件并导出至excel表格 ? 图片批量识别导出excel表格应用,图片批量识别转excel表格的方法
|
7月前
|
Java API Spring
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
集成EasyPoi(一个基于POI的Excel导入导出工具)到Spring Boot项目中
609 1
|
7月前
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
|
8月前
|
Java Apache 索引
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
POI操作大全(动态合并单元格,为单元格生成一个自定义的数据显示格式,自定义公式计算结果生成,读取excel,word文件在生成图片,word指定位置生成图片)
1091 0
|
1月前
|
数据采集 数据可视化 数据挖掘
利用Python自动化处理Excel数据:从基础到进阶####
本文旨在为读者提供一个全面的指南,通过Python编程语言实现Excel数据的自动化处理。无论你是初学者还是有经验的开发者,本文都将帮助你掌握Pandas和openpyxl这两个强大的库,从而提升数据处理的效率和准确性。我们将从环境设置开始,逐步深入到数据读取、清洗、分析和可视化等各个环节,最终实现一个实际的自动化项目案例。 ####
136 10
|
3月前
|
数据采集 存储 JavaScript
自动化数据处理:使用Selenium与Excel打造的数据爬取管道
本文介绍了一种使用Selenium和Excel结合代理IP技术从WIPO品牌数据库(branddb.wipo.int)自动化爬取专利信息的方法。通过Selenium模拟用户操作,处理JavaScript动态加载页面,利用代理IP避免IP封禁,确保数据爬取稳定性和隐私性。爬取的数据将存储在Excel中,便于后续分析。此外,文章还详细介绍了Selenium的基本设置、代理IP配置及使用技巧,并探讨了未来可能采用的更多防反爬策略,以提升爬虫效率和稳定性。
198 4
|
17天前
|
存储 Java easyexcel
招行面试:100万级别数据的Excel,如何秒级导入到数据库?
本文由40岁老架构师尼恩撰写,分享了应对招商银行Java后端面试绝命12题的经验。文章详细介绍了如何通过系统化准备,在面试中展示强大的技术实力。针对百万级数据的Excel导入难题,尼恩推荐使用阿里巴巴开源的EasyExcel框架,并结合高性能分片读取、Disruptor队列缓冲和高并发批量写入的架构方案,实现高效的数据处理。此外,文章还提供了完整的代码示例和配置说明,帮助读者快速掌握相关技能。建议读者参考《尼恩Java面试宝典PDF》进行系统化刷题,提升面试竞争力。关注公众号【技术自由圈】可获取更多技术资源和指导。