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)的时候会极度慢,这也是暂时很疑惑的一点。

JavaPOI处理Excel的更多相关文章

  1. JAVA-POI实现EXCEL的读写

    想要完成JAVA读写EXCEL,首先需要JAVA-POI包的支持,百度搜索即可找到资源,不再赘述: POI-新增EXCEL并输入内容 package com.gsh.test.poi; import ...

  2. java--POI解析excel兼容性问题

    近日,使用POI解析excel,发现2003版本的excel解析与2007版本的excel解析存在问题.特此总结: 1.所需jar包 : 2.java类代码(读取excel文件): public vo ...

  3. Java-Poi 读取excel 数据

    一直想着使用java操作excel,但有时各种原因一直没有实现.由于工作无意间做了个其他demo,为了进一步发散就涉及到了使用excel,为此开始正式接触POI,虽然限制不是很了解POI,但是通过查阅 ...

  4. java-POI处理excel文件方法

    处理excel文件的开源库有很多,常见的POI.jxls..... 重点分析下POI处理excel的方法: 1.写文件 // 按照行优先进行数据表格的初始化 public static void cr ...

  5. java--poi读取excel图片和内容(支持03版本)

    有的时候需要将excel中所包含的图片在导入的时候取出来存到服务器中, 详细实现代码如下: package com.liuf.util; import java.io.BufferedInputStr ...

  6. SpringBoot入门教程(十四)导出Excel

    用JavaPOI导出Excel时,我们会考虑到Excel版本及数据量的问题.针对不同的Excel版本,要采用不同的工具类.HSSFWorkbook:是操作Excel2003以前(包括2003)的版本, ...

  7. Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述

    Java HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 一.HSSFworkbook,XSSFworkbook,SXSSFworkbook区别简述 用Java ...

  8. POI导出大量数据的简单解决方案(附源码)-Java-POI导出大量数据,导出Excel文件,压缩ZIP(转载自iteye.com)

    说明:我的电脑 2.0CPU 2G内存 能够十秒钟导出 20W 条数据 ,12.8M的excel内容压缩后2.68M 我们知道在POI导出Excel时,数据量大了,很容易导致内存溢出.由于Excel ...

  9. java-poi 批量导入excel数据

    1,首先,前端发送MultipartFile类型文件,后端接收 2,分别创建多个ImportParams对象(easypoi),对应工作蒲 注意:pom中 要有相对应的配置 <!-- easyp ...

随机推荐

  1. Jmeter之处理session、cookie以及如何做关联

    具体描述问题之前,我们先了解下session.cookie session.cookie的概念 1.session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以 ...

  2. tar命令(转)

    把常用的tar解压命令总结下,当作备忘: tar -c: 建立压缩档案-x:解压-t:查看内容-r:向压缩归档文件末尾追加文件-u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个, ...

  3. 浅谈jQuery Pagination Ajax 分页插件的使用

    插件介绍 此插件是jQuery的ajax分页插件.分页切换时无刷新也无延迟,因为是一次性加载的.如果你用到此插件作分页的时候,涉及到的数据量大,建议不要使用此插件,因为加载慢会导致用户体验不好! 插件 ...

  4. 亚马逊AWS EC2云实例AMI安装LNMP环境(1)——Nginx安装

    概括:这里选择亚马逊EC2的Linux AMI实例,该Linux服务器是亚马逊预配置的Linux环境,内置多个YUM源,属于亚马逊首推的稳定Linux服务器.默认登录用户名为ec2-user,执行ro ...

  5. 使用jquery获取url及url参数的方法

    使用jquery获取url以及使用jquery获取url参数是我们经常要用到的操作 1.jquery获取url很简单,代码如下: window.location.href; 其实只是用到了javasc ...

  6. ubuntu下安装opencv库+Python2.7环境安装及开发摄像头拍照应用

    好久没有更新了,今天更一篇最近遇到的问题,及解决办法,后面博客得继续写起来 安装 #使用Python下的lib库直接进行安装 apt-get install python-opencv 测试 #使用如 ...

  7. 微信小程序movable-view移动图片和双指缩放

    先从movable-view开始说起吧. movable-view是小程序自定义的组件.其描述为:"可移动的视图容器,在页面中可以拖拽滑动". 官方文档地址:https://mp. ...

  8. echarts 柱状图,每根柱子显示不同颜色(随机显示和定制显示)

    1,定制显示 option = { title: { text: '某地区降水量', subtext: '纯属虚构' }, tooltip: { trigger: 'axis' }, grid: { ...

  9. NYOJ--353--bfs+优先队列--3D dungeon

    /* Name: NYOJ--3533D dungeon Author: shen_渊 Date: 15/04/17 15:10 Description: bfs()+优先队列,队列也能做,需要开一个 ...

  10. Activity中finish()和onDestroy()的区别

    finish()方法用于结束一个Activity的生命周期,而onDestory()方法则是Activity的一个生命周期方法,其作用是在一个Activity对象被销毁之前,Android系统会调用该 ...