xlsx和xlsm区别:
xlsm中默认启动宏,而xlsx则是虽然带有宏,也不会被excel执行。
写在前头的经验教训:
1,POI-3.15的Sheet.getLastRowNum()是0-based;Row.getLastColNum()结果是1-based。
2,poi中getPhysicalNumberOfRows()和getLastRowNum()区别 :
举例说明:修改xlsx文件后缀为rar,解压之(xlsx是ooxml格式的文件)。找到xl\worksheets\sheet*.xml文件,打开,可以看到这是一个xml文件,这时候,如果我们在其中的sheetData元素中添加一个空的<row></row>标签。
getPhysicalNumberOfRows()计算的是所有的<row>标签的总数。
getLastRowNum()计算的是所有<row>标签中r属性(行号)的最大值。
所以我们在遍历EXCEL的时候,应该使用的遍历行号上限(闭区间)是getLastRowNum().在这其中,可能会遇到Row==null的情况需要跳过。
另一方面,出于业务方向的考虑,我们一般要检查row!=null的时候一行中是否全是“空白”符号,如果全是空白符号的行一般不作为数据行分析。
3,有关格式,千万不要试图将那些线程不安全的对象作为静态常量,之前在使用jxl框架的时候,企图将格式对象作为全局静态常量,最后居然在因为线程不安全居然出现了相当摸不着头脑的bug(第一次导出成功,之后的同一导出请求的返回数据文件很可能会被损坏)。
读:
辅助类:
/**
* @author kingbaron
* @version 1.0
* @date 2016/12/21
* @package demo
*/
public class WorkbookFactory {
/**
* 读取excel输入流
* @param ips
* @return
*/
public static Workbook createWorkBook(InputStream ips){
Workbook workbook=null;
try{
workbook=getWorkBook(ips);
}catch (Exception ex){
throw new AppInternalException("打开EXCEL文件流失败!",ex);
}
return workbook;
}

这篇博客介绍了Apache POI库在处理xlsx和xlsm文件的区别,强调了在使用POI-3.15版本时关于Sheet.getLastRowNum()和Row.getLastColNum()的注意事项。在读取Excel时,文章提到了getPhysicalNumberOfRows()与getLastRowNum()的区别,并给出了遍历行的正确方法。此外,还提醒开发者在处理格式时要注意线程安全问题,避免将格式对象声明为静态常量。博客中包含读写Excel的辅助类和基本业务代码示例。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



