POI解析Excel表格
Apache POI
是Apache
软件基金会的开放源码函式库,POI
提供API
给Java
程序对Microsoft Office
格式档案读和写的功能。
这里实现poi
解析Excel
表格的例子,导入Excel
,
准备食材
第一道菜
第二道菜
下锅炸至两面金黄
package com.ftx.poi;import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class ParseExcel {/*** 解析文件的方法*@param inputStream文件输入流 ,要解析的Excel文件输入流*@param suffix 后缀名,xls或xlsx,代码决定使用什么方式解析Excel*@param startRow 从第几行开始读取数据*@return List<String[]> 集合中的一个元素对应一行解析的数据* 元素为字符串数组类型,数组中的每一个元素对应一列数据* @throws IOException */public List<String[]> parseExcel(InputStream inputStream,String suffix,int startRow) throws IOException{//定义Excel对象变量Workbook workbook=null;//判断后缀 决定使用的解析方式,决定如何创建具体的对象if("xls".equals(suffix)) {//2003版的解析方式workbook=new HSSFWorkbook(inputStream);}else if("xlsx".equals(suffix)) {//2007workbook=new XSSFWorkbook(inputStream);}else {//未知内容return null;}//获取工作表,Excel分为若干个表,sheetSheet sheet = workbook.getSheetAt(0);//得到第一个表格sheetif(sheet==null) {return null;}//获取表格中最后一行的行号int lastRowNum = sheet.getLastRowNum();//最后一行的行号大于startRowif(lastRowNum<=startRow) {return null;}List<String[]> result=new ArrayList<String[]>();//定义行变量和单元格变量Row row=null;Cell cell=null;//循环读取for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {row=sheet.getRow(rowNum);//获取当前行的第一列和最后一列的标记short firstCellNum = row.getFirstCellNum();short lastCellNum = row.getLastCellNum();if(lastCellNum!=0) {String[] rowArray=new String[lastCellNum];for(int cellNum=firstCellNum;cellNum<lastCellNum;cellNum++) {//拿到单元格的值cell=row.getCell(cellNum);//判断单元格是否有数据if(cell==null) {rowArray[cellNum]=null;}else {rowArray[cellNum]=parseCell(cell);}}result.add(rowArray);}}return result;}/*** 解析单元格数据(返回字符串)*/private String parseCell(Cell cell) {String cellStr=null;//判断单元格的类型switch (cell.getCellType()) {case STRING ://字符串类型单元格cellStr=cell.getRichStringCellValue().toString();break;case BLANK ://空数据cellStr="";break;case NUMERIC ://数字类型 包含日期、时间、数字//判断日期【年月日2016-12-20 | 时分10:20】类型if(HSSFDateUtil.isCellDateFormatted(cell)) {//判断具体类型,是日期还是时间SimpleDateFormat sdf=null;if(cell.getCellStyle().getDataFormat()==HSSFDataFormat.getBuiltinFormat("h:mm")) {//时间sdf=new SimpleDateFormat("HH:mm");}else {//日期sdf=new SimpleDateFormat("yyyy-MM-dd");}Date temp = cell.getDateCellValue();cellStr=sdf.format(temp);}else {//数字double temp=cell.getNumericCellValue();//数字格式化工具DecimalFormat format=new DecimalFormat();//查看单元格中的具体样式类型String formatStr=cell.getCellStyle().getDataFormatString();if(formatStr.equals("General")) {/*** 定义格式化正则* 保留一位小数 #.#* 保留两位小数#.##*/format.applyPattern("#");}cellStr=format.format(temp);}break;default:cellStr="";}return cellStr;
}}
吃一口嘎嘣脆
public class Test {public static void main(String[] args) throws IOException {ParseExcel parser=new ParseExcel();InputStream inputStream=new FileInputStream("D:\\工作内容\\poiTestTwo.xls");String suffix="xls";int startRow=1;List<String[]> result = parser.parseExcel(inputStream, suffix, startRow);for(String[] i:result) {//Arrays.toString("字符串数组") 打印字符串数组,直接打印字符串数组会打印出数组的地址System.out.println(Arrays.toString(i));}}}
运行测试类,解析出了Excel
表格的内容。
说明:上面的poi
只能是解析03和07版本的Excel
,如果不是这个版本的Excel
的话需要另存为03或07版本然后再进行解析,否则会报错找不到对应的jar包。
现在只是把Excel
表格的内容解析成了字符串数组的形式,如果导入到数据库的话还需要再对其字符串数组进行处理。
思路提示:实现在页面点击按钮导入Excel表格
进行导入的功能,使用<input type="file" />
表单提交,在controller
中接收到的就是File
对象,就不用像上面的测试类中写死的样子了。
根据suffix
判断表格文件的版本(获取后缀参考图片上传)
public String upload(@RequestParam(value = "pic") MultipartFile pic,@RequestParam Map param,Model model) throws ParseException {String fileName=pic.getOriginalFilename();//得到文件名String suffixName=fileName.substring(fileName.lastIndexOf("."));//得到后缀名
POI解析Excel表格相关推荐
- 使用poi解析excel表格,并导入数据
废话不多说,先导入jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...
- 【poi-3.8】poi解析excel插入数据库详解
文章目录 poi解析excel&插入数据库详解 说明 一.目的 二.准备工作 三.思路分析 四.流程图分析 五.核心代码 1:上传文件 2:获取输入流 3:初始化excel表 4:遍历行和列 ...
- springboot + poi 解析 excel
Apache POI 是用 Java 编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对 Microsoft Office 格式档案读和写的功能. 本文使用 s ...
- poi解析excel读取日期为数字的问题
Apache poi 版本:3.12 今天在用poi解析excel文件时,碰到一个蛋疼的问题. 在我的excel文件中有一列是日期类型,例如有以下这么一行数据(日期中月份前面的0会自动去掉): 在读取 ...
- ssh excel 导入 mysql_ssh poi解析excel并将数据存入数据库
做完了一个报表导入数据库 功能 遇到几个问题:一 .Poi解析excel 的两种格式 xls xlsx. 二.form表单上传使用ajax 三.excel 单元格中有公式存在普通的读取方式读到的是公式 ...
- Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法
java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...
- 【web开发】☆★之利用POI操作Excel表格系列教程【6】遍历工作簙行和列取值
[web开发]☆★之利用POI操作Excel表格系列教程[6]遍历工作簙行和列取值 package com.xiaoye.demo; import java.io.FileInputStream; i ...
- vue实现纯前端导入与解析excel表格文件,导出Excel
一.安装相关依赖 npm install --save xlsx file-saver 二.使用 import * as XLSX from 'xlsx/xlsx.mjs' const FileSav ...
- node koa解析excel表格 .xlsx .xls
node koa解析excel表格数据 使用到的插件 co-busboy xlsx 安装完成之后,下面开始我们的搬运代码工作 使用到的插件 co-busboy 作用 用于node koa1 解析流文件 ...
最新文章
- hdu 2988 Strange fuction【模拟退火】
- python学习(十八) 程序打包
- jQuery的next()、nextAll()、nextUntil()方法
- day21-python模块
- BeanFactory和ApplicationContext有什么区别?
- 本地计算机无法启动,winxp系统下本地计算机无法启动Windows Time服务怎么办
- 安装saltstack遇到的问题锦集
- Android中文API(142) —— Gravity
- 微信秘笈之--微信多开
- SpringBoot引入Redis
- 使用mybatis-generator自动生成代码(附GitHub下载地址)
- 啊哈C语言 第1章 编程改变思维(第0讲)
- HP Proliant DL360 G9使用业务网卡登录ILO管理
- 贝叶斯网络(belief network)
- “当当收店庆费一事”之我见
- SOA对话:金融风暴不会阻碍SOA市场发展
- Win7安装VMware
- 转贴-刻录品质经典文章之一
- android仿抖音礼物列表实现,Android仿抖音列表效果
- Ubuntu 20.04 + ROS Noetic + OpenCV 4.10编译kalibr相机标定功能包
热门文章
- 多目标优化问题的研究概述(Matlab代码实现)
- 乌隆他尼皇家大学举办第48届泰国大学生运动会新闻发布会
- 笔记本(win10、win7)开机在LOGO过后出现闪屏几下才进入系统成功解决问题步骤分享
- https://acs.jxnu.edu.cn/problem/GYM103495E
- 函数参数三种传递方式的区别
- 5年后端WEB开发者的开机必备软件
- 搭建嵌入式开源开发环境
- python爬取链家租房信息_Python爬取链家网上海市租房信息
- JPA 数据库添加数据报错:Cannot add or update a child row: a foreign key constraint fails
- 《出版专业基础》2015年版(初级)思考与练习 第六章