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 !


(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);



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

示例二

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


此时 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);


原第四行(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);

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


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

sheetFirst.shiftRows(startRow, endRow, n, copyRowHeight, resetOriginalRowHeight, moveComments);

示例:

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

POI(excel)中ROW应用实践应用总结相关推荐

  1. POI(excel)中WorkBook和Sheet应用实践总结

    WorkBook定义 工作簿的高级表现形式,是sheet的上级对象.一个excel就是一个工作簿,一个工作簿含有多个工作表(sheet). [1]WorkBook两种创建形式 ① 使用直接对象 // ...

  2. Excel中row函数的使用方法

    1.row函数的含义 1 row函数的含义 返回所选择的某一个单元格的行数. END 2.row函数的语法格式 1 row函数的语法格式 =row(reference) 如果省略reference,则 ...

  3. Excel中ROW函数的使用【转载】

    文章目录 1 基础用法 2 升级用法 2.1 生成特定的循环序列号 2.1 序号自动更新 2.3 隔行填充颜色 2.4 隔行提取信息 2.5 提取字符串前面的数字 1 基础用法 ROW函数主要是返回引 ...

  4. Excel中ROW/COLUMN/INT/MOD函数

    ROW函数:获取行号 =row() 返回公式所在单元格的行号 =row(B8) 返回指定单元格的行号,即B8的行号8 =row(B6:E9) 返回 左上角单元格的行号,即B6的行号6 COLUMN函数 ...

  5. 计算机中绝对值用哪个函数,Excel中的绝对值函数具体该如何使用呢?

    如何在Excel中使用绝对值函数?下面是学习编辑器分享的excel中绝对值函数的使用方法,供大家阅读学习. excel绝对值函数的使用方法 使用绝对值函数的步骤1:下面一列数据,正负,取绝对值 exc ...

  6. java excel row遍历空_用Java巧妙的解析Excel中的POI

    原标题:用Java巧妙的解析Excel中的POI 相信各位小伙伴们,在做Java开发的时候,有时候会需要你用Java语言去解析Excel中的POI,这个时候肯定很多小伙伴们会懵逼,那么究竟是怎么实现的 ...

  7. 使用POI删除Excel中的行(亲自实践)

    删除行 一般情况下,删除行时会面临两种情况:删除行内容但保留行位置.整行删除(删除后下方单元格上移).对应的删除方法分别是:removeRow()及shiftRow(startRow,endRow,s ...

  8. java操作poi如何更改excel中的数据

    http://www.myexception.cn/j2ee/17951.html 修改文件最后还需要通过IO流操作来保存更改,这其实是很关键的一步,你代码里面没有IO的关闭操作,导致了数据的修改没有 ...

  9. java excel row遍历空_Java poi读取,写入Excel,处理row和cell可能为空的情况

    首先需要导入包 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.NP ...

最新文章

  1. 人类间谍快“混”不下去了,CIA 打算用 AI 替代他们
  2. 走过2010,期盼2011!
  3. 基于js对象,操作属性、方法详解
  4. MySQL_数据类型
  5. SLAM GMapping(2)传感器
  6. 专家论道,把脉数据库技术发展新方向
  7. 返回值 包装类_java中基本类型包装类
  8. Flask 验证模式
  9. 第二十三章:触发器和行为(九)
  10. RK61 RGB 蓝牙双模键盘使用说明
  11. 车载娱乐系统开发术语记录
  12. python实现3d扫描_三维激光扫描建模仪(基于树莓派)
  13. SQL语句,数据库增加、删除、修改、查询
  14. 驱动篇 -- PMOS管应用
  15. pvifa怎么用计算机算,年金现值系数表【完整版】
  16. python中类变量和实例变量详解
  17. 计算机和hdmi无法正常显示,Win7系统下电脑HDMI连接显示器字体显示虚不清楚如何解决...
  18. 〖Kindle Paperwhite〗升级、越狱、换屏保教程
  19. excel教程自学网_5个相见恨晚的自学网站,个个精心挑选,爱学习的你正好需要!...
  20. Ubuntu搭建博客typecho

热门文章

  1. 边界Fisher分析(MFA)及其非线性改进核边界Fisher分析(KMFA)的验证对比
  2. 京东自建数据中心核心技术解密——基础设施篇
  3. 数模混合监控,视频如何联动报警、消防、门禁?
  4. 122.Linux系统和Shell命令行简介,走上数据分析之路
  5. C++编程积累——解决cinnum输入问题,cin无效,无法从屏幕输入(cin状态清除)
  6. caffe学习笔记20-BatchNorm层分析
  7. 量化投资学习——股指期货研究(六)
  8. 从车联网基础知识出发通往5G彼岸
  9. pycharm发送邮件(QQ邮箱和网易163为例)
  10. android 内部sdcard出错处理errors=remount-ro改为errors=continue