博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaPOI处理Excel
阅读量:6757 次
发布时间:2019-06-26

本文共 1883 字,大约阅读时间需要 6 分钟。

   java处理excel,心得分享如下,如有不妥或者需要补充的地方,敬请指出,欢迎随时交流

  1.加载excel,获得workbook对象

fileTemp = new File(pathOfMExcel);

ins = new FileInputStream(fileTemp);
wb = WorkbookFactory.create(ins);

ins.close();

 2.获得workbook对象后,既可以操作sheet和单元格了

获得sheet对象

Sheet sheet = wb.getSheetAt(k);//k=0表示第一个sheet

获得行对象(根据行对象就可以获得单元格对象了)

Row row = sheet.getRow(7);//第6行

Cell cell =row.getCell(2); //第1列

3.对于单元格的操作可以参照API即可。

4.强制刷新sheet公式,

  excel里面可能隐含公式,更新和excel公式相关的单元格的时候需要更新。

sheet_1.setForceFormulaRecalculation(true);//sheet_1为sheet对象

5.对于单元格的设置值,我是如此处理的:

 先设置单元格全为String类型,然后根据需要,将某一列设置为数字,但是这列也有可能存在空和Sring类型,简单说,就是这列如果是数字需要设置为number类型,参与excel的公式计算,然后可以采用下面进行判断:

if (cell3.getCellType() == 3) {//空类型

continue;
}

if (cell3.getCellType() == 1 && cell3.getCellType() != 3) {//string类型

if (isNumberCheck(cell3.getStringCellValue())) {//判断是否为数字
 cell3.setCellValue(Double.parseDouble(cell3.getStringCellValue()));//如果为数字,设置为number
} else {
continue;
}

 

if (cell3.getCellType() == 0 && cell3.getCellType() != 3) {//数字类型

    if (isNumberCheck(cell3.getStringCellValue())) {//判断是否为数字(单元格格式为数字,值不一定)
           cell3.setCellValue(Double.parseDouble(cell3.getStringCellValue()));
} else {
continue;
}

6.对于单元格日期全变为数字的处理:

excel的日期起始业数字数字类型的一种,所以如下处理,免得最后都成为数字:

if (0 == cell.getCellType(){//数字类型

   if (DateUtil.isCellDateFormatted(cell)) {

     // 用于转化为日期格式
      Date d = (Date) cell.getDateCellValue();
      DateFormat formater = new SimpleDateFormat("yyyy-MM-dd");
       return formater.format(d);
     }

}

7.对于百分号的处理,我就要显示为百分数的形式:

double d = Double.valueOf(pertage);

DecimalFormat df = new DecimalFormat("#%");
df.setRoundingMode(RoundingMode.DOWN);
return df.format(d);

8.将已存在的Excel修改,最后写入excel:

out = new FileOutputStream(fileTemp);//fileTemp第1点提到的

wb.write(out);
out.close();

很奇怪的是,如果fileTemp使用一开始加载excel就初始化的File流,那么执行wb.write(out);是很快的,如果再new一个File流,然后用再使用FileOutputStream加载,最后wb.write(out)的时候会极度慢,这也是暂时很疑惑的一点。

 

转载于:https://www.cnblogs.com/liyunzhouts/p/7471600.html

你可能感兴趣的文章
javabean,pojo,vo,dto,
查看>>
·转」linux的学习路线
查看>>
寄存器
查看>>
2008年12月在东京出差时给国内的回信
查看>>
android 环境搭建
查看>>
软件清单
查看>>
面试:用 Java 逆序打印链表
查看>>
Android内存优化(三)详解内存分析工具MAT
查看>>
SQL Server事务遭遇网络异常时的处理机制浅析
查看>>
Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目
查看>>
SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest...
查看>>
libcgi库安装
查看>>
小米:开源不仅要站在巨人的肩膀上,还要为巨人指方向
查看>>
百度启动高管退休计划,总裁张亚勤今年十月退休
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2->新增“行政区域管理”,同时大批量树采用异步加载...
查看>>
SpringBoot启动时的Banner设置
查看>>
xming + putty 搭建远程图形化ssh访问ubuntu 14.04
查看>>
【Sigma敏捷版系列文章】从运行流程和list-watch看kubernetes系统的设计理念
查看>>
两列布局——但只用右浮动
查看>>
GNOME 网页浏览器 Epiphany 将要进行 5 项改进
查看>>