一、POI概述

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

结构:

  • HSSF - 提供读写Microsoft Excel格式档案的功能。
  • XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。

HSSF 常用于处理.xls(带宏/VBA的表格)
XSSF 常用于处理.xlsx (不带宏/VBA的表格)

  • HWPF - 提供读写Microsoft Word格式档案的功能。
  • HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
  • HDGF - 提供读写Microsoft Visio格式档案的功能。

在这里我们以HSSF为例,进行介绍。

我们需要实现的功能是:
已经存在一个.xls的excel模板存放在本地,我们需要拿到这个模板,根据用户的不同,在上面动态写入用户信息,并从数据库中取出一堆信息,作为模板中某列单元格点击时触发弹框的内容,让用户可以在弹框中复选想要得信息。然后后台校验用户上传的表格,如果有错误,返回错误信息;没有错误,则存入数据库。

二、实战代码


//1. 找到我们存放模板的路径
//注:File.separator 与系统相关的分隔符字符,以方便在不同系统都能运行
String pathFrom = ".." + File.separator + "webserver" + File.separator + "webapps" + File.separator + "portal" + File.separator + "apps" + File.separator + AppIdConstant.APPID + File.separator + "model" + File.separator + "BatchElevator.xlsx";//2. 获取到它
File fileIn = new File(pathFrom );//3. 写好后的模板存放的路径
String pathTo = ".." + File.separator + "doccenter" + File.separator + AppIdConstant.APPID + File.separator + "downLoadEquInfoTemp";//4. 获取到(如果不存在,则创建此路径)
File fileCheck = new File(pathTo );
if (!fileCheck .exists()) {if (!fileCheck .mkdir()) {throw new RuntimeException("创建目录失败!");}
}//5. 创建我们的目标模板
File fileOut = new File(pathTo + File.separator + "新取一个名字.xlsx");//6. fileIn复制到fileOut  可用文件流FileStreams操作,但是效率低。这里我们使用FileChannel进行复制
copyFile(fileIn, fileOut);//方法内容如下:
private static void nioTransferCopy(File source, File target) throws IOException {FileChannel in = new FileInputStream(source).getChannel();FileChannel out = new FileOutputStream(target).getChannel();in.transferTo(0, in.size(), out);in.close();out.close();
}//7.获取XSSFWorkbook对象并输出
FileInputStream is = new FileInputStream(fileOut.getPath());
XSSFWorkbook wb = new XSSFWorkbook(is);
wb.write(new FileOutputStream(fileOut.getPath()));

注:实际上有以下方法可以构造对象,建议使用is构建,之前用path构造,其实需要调用close()方法将新建的xslx对象关闭,而关闭了该对象之后无法将文件输出,如果不关闭该对象又一直占用着这个地址导致输出流会报空指针错误,所以后来使用了XSSFWorkbook(java.io.InputStream is)这个构造方法,也建议使用该构造方法,调用该方法之后及时将输入流关闭,再输出文件的时候就不会报空指针错误了。

三、如何用VBA做复选弹框

三、使用常用POI方法操作模板

1. 得到Excel常用对象
is = new FileInputStream(fileOut.getPath());
//得到Excel工作簿对象
XSSFWorkbook wb = new XSSFWorkbook(is);
//得到Excel工作表对象
XSSFWorkbook sheet = wb.getSheetAt(0);
//得到Excel工作表的行(下标从0开始)
XSSFRow row = sheet.getRow(i);
//得到Excel工作表指定行的单元格(下标从0开始)
XSSFCell cell = row.getCell((short) j);
//得到单元格样式
cellStyle = cell.getCellStyle();
2. 建立Excel常用对象
//创建Excel工作簿对象
HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("new sheet");//创建Excel工作表对象
HSSFRow row = sheet.createRow((short)0); //创建Excel工作表的行
cellStyle = wb.createCellStyle();//创建单元格样式
row.createCell((short)0).setCellStyle(cellStyle); //创建Excel工作表指定行的单元格
row.createCell((short)0).setCellValue(1); //设置Excel工作表的值

需要注意的是 getRow、getCell方法可能会获取不到未编辑过的单元格,报空指针,此时要用createRow、createCell方法!

3. 添加区域,合并单元格
//获取区域(下标从0开始)
CellRangeAddress region= new CellRangeAddress(firstRow, lastRow, firstCol, lastCol);
// 到rowTo行columnTo的区域
sheet.addMergedRegion(region);
//获得所有合并单元格的数量
int num = sheet.getNumMergedRegions();

四、写入数据库数据

通过POI提供的基础方法,可以根据工作需要,写一个FilesUtil,或者创建一个FileProc实体类,提高工作效率。
举例:


/*** 处理.xlsx的sheet写入字典信息** @param appId* @param dicName* @param sheet* @author fangwanchen* @date 2019/8/9 10:28*/
public static void writeDicIntoXLSXSheet(String appId, String dicName, XSSFSheet sheet){JSONArray jsonArray = SDK.getDictAPI().queryValues(appId, dicName);if (jsonArray != null && jsonArray.size() > 0) {for (int i = 0; i < jsonArray.size(); i++) {JSONObject obj = jsonArray.getJSONObject(i);String name = obj.getString("CNNAME");XSSFRow row = sheet.createRow(i);XSSFCell cell = row.createCell(0);cell.setCellValue(name);}}
}//sheet1可以隐藏掉,sheet0下拉列表获取sheet1第一列的序列范围,ojbk
XSSFSheet sheetXMYT = wb.getSheetAt(1);
FilesUtil.writeDicIntoXLSXSheet(AppIdConstant.APPID, "MARKETSUBJECT.CODE.PURPOSE", sheetXMYT);

POI操作EXCEL实战相关推荐

  1. Java实战—POI操作Excel文档、读取、写入、合并单元格

    一.POI项目简介 POI全称 Poor Obfuscation Implementation,利用POI接口可以通过JAVA操作Microsoft office 套件工具的读写功能.官网:http: ...

  2. poi 导出excel实战与word新增行与excel添加背景色与设置单元格边框

    提示:本文尽可能简洁通俗的讲解[poi 导出excel实战] ,如需导入可见文尾 一.导入依赖: <!--Apache poi--><!--xls(03)--><depe ...

  3. Java - Poi 操作 Excel

    Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...

  4. Apache POI操作Excel导出JAVABEAN对象方法

    2019独角兽企业重金招聘Python工程师标准>>> Apache POI操作Excel导出方法说明 Apache的POI组件是Java操作Microsoft Office办公套件 ...

  5. Apache POI操作Excel的坑

    本文记录一下用Apache POI操作Excel时可能遇到一些坑. excel版本错误 首先是excel版本问题,由于office excel 03版和07版的区别,在读取文件时如果版本不匹配会报以下 ...

  6. 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值

    [web开发]☆★之利用POI操作Excel表格系列教程[6]遍历工作簙行和列取值 package com.xiaoye.demo; import java.io.FileInputStream; i ...

  7. java apache.poi_Java利用apache的POI操作Excel

    最近在写一些报表的活,顺便总结下...第一篇博文,希望多多指教. 项目中经常会设计到一些数据的报表问题,目前java中操作Excel的插件也有很多 ,我说下用apache的POI操作Excel的方法. ...

  8. POI操作Excel时Cannot get a text value from a numeric formula cell非法参数异常

    POI操作Excel时Cannot get a text value from a numeric formula cell非法参数异常 参考文章: (1)POI操作Excel时Cannot get ...

  9. execle java,Java使用POI操作Excel

    Java使用POI操作Excel 1. POI操作Excel 1.1. 依赖 org.apache.poi poi 4.1.0 org.apache.poi poi-ooxml 4.1.0 org.a ...

最新文章

  1. String比较.equals
  2. java中的抛出异常throws与throw
  3. Java黑皮书课后题第5章:*5.42(金融应用:求销售额)如下重写编程练习题5.39:①使用for循环替代do-while循环②允许用户自己输入COMMISSION_SOUGHT而非将它固定为常量
  4. 遮罩层中的相对定位与绝对定位(Ajax)
  5. EMC -- DFS篇(Documentum Foundation Services)
  6. #上传文件的post请求
  7. 两轮差速驱动机器人轮间距校准方法
  8. C#开发微信门户及应用(13)-使用地理位置扩展相关应用
  9. 不可以! 南阳理工ACM 题目1071
  10. JS 特效代码 400例
  11. 微信授权登陆跳转提示10003 redirect_uri域名与后台配置不一致
  12. Mac securecrt 破解版安装
  13. 计算机所有以太网适配的ip,以太网没有有效的ip配置怎么办
  14. Latex入门_第3章:文档元素
  15. java框架要求合同_java毕业设计_springboot框架的合同管理
  16. 无法启用网络发现和文件共享或共享无法访问
  17. 机器学习之经典算法(十一) 条件随机场
  18. 小程序手持弹幕的原理及实现(uni-app)
  19. 2021年茶艺师(中级)考试报名及茶艺师(中级)考试试卷
  20. State of Vue.js report 2017 中文版

热门文章

  1. PHP数据类型与运算符
  2. 支付宝、微信、农行、招商银行账单保存到数据库
  3. 笔记本显示网络电缆被拔出怎么解决_笔记本提示网络电缆被拔出,我在自己的位置上显示网络电缆被拔出,但? 爱问知识人...
  4. 2019最新微专业Python应用基础(11周精通Python计划)
  5. SGSAKVAFSAIRSTNH|94071-26-8
  6. 易地推拓客团队一次错误的招生外包浪费的不仅仅是金钱
  7. php处理mp3,在PHP中自动剪裁MP3
  8. 301跳转 https_部署https(ssl证书)后设置301跳转将http跳转到https的方法
  9. 产品经理到底在面试什么
  10. 中职计算机网络技术 课件,中职课件