Apache POIApache软件基金会的开放源码函式库,POI提供APIJava程序对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表格相关推荐

  1. 使用poi解析excel表格,并导入数据

    废话不多说,先导入jar包 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.poi/poi --&g ...

  2. 【poi-3.8】poi解析excel插入数据库详解

    文章目录 poi解析excel&插入数据库详解 说明 一.目的 二.准备工作 三.思路分析 四.流程图分析 五.核心代码 1:上传文件 2:获取输入流 3:初始化excel表 4:遍历行和列 ...

  3. springboot + poi 解析 excel

    Apache POI 是用 Java 编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对 Microsoft Office 格式档案读和写的功能. 本文使用 s ...

  4. poi解析excel读取日期为数字的问题

    Apache poi 版本:3.12 今天在用poi解析excel文件时,碰到一个蛋疼的问题. 在我的excel文件中有一列是日期类型,例如有以下这么一行数据(日期中月份前面的0会自动去掉): 在读取 ...

  5. ssh excel 导入 mysql_ssh poi解析excel并将数据存入数据库

    做完了一个报表导入数据库 功能 遇到几个问题:一 .Poi解析excel 的两种格式 xls xlsx. 二.form表单上传使用ajax 三.excel 单元格中有公式存在普通的读取方式读到的是公式 ...

  6. Java面试poi中excel版本大小_java 中 poi解析Excel文件版本问题解决办法

    java 中 poi解析Excel文件版本问题解决办法 发布时间:2020-10-02 03:46:15 来源:脚本之家 阅读:91 作者:程诺 poi解析Excel文件版本问题解决办法 poi解析E ...

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

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

  8. vue实现纯前端导入与解析excel表格文件,导出Excel

    一.安装相关依赖 npm install --save xlsx file-saver 二.使用 import * as XLSX from 'xlsx/xlsx.mjs' const FileSav ...

  9. node koa解析excel表格 .xlsx .xls

    node koa解析excel表格数据 使用到的插件 co-busboy xlsx 安装完成之后,下面开始我们的搬运代码工作 使用到的插件 co-busboy 作用 用于node koa1 解析流文件 ...

最新文章

  1. hdu 2988 Strange fuction【模拟退火】
  2. python学习(十八) 程序打包
  3. jQuery的next()、nextAll()、nextUntil()方法
  4. day21-python模块
  5. BeanFactory和ApplicationContext有什么区别?
  6. 本地计算机无法启动,winxp系统下本地计算机无法启动Windows Time服务怎么办
  7. 安装saltstack遇到的问题锦集
  8. Android中文API(142) —— Gravity
  9. 微信秘笈之--微信多开
  10. SpringBoot引入Redis
  11. 使用mybatis-generator自动生成代码(附GitHub下载地址)
  12. 啊哈C语言 第1章 编程改变思维(第0讲)
  13. HP Proliant DL360 G9使用业务网卡登录ILO管理
  14. 贝叶斯网络(belief network)
  15. “当当收店庆费一事”之我见
  16. SOA对话:金融风暴不会阻碍SOA市场发展
  17. Win7安装VMware
  18. 转贴-刻录品质经典文章之一
  19. android仿抖音礼物列表实现,Android仿抖音列表效果
  20. Ubuntu 20.04 + ROS Noetic + OpenCV 4.10编译kalibr相机标定功能包

热门文章

  1. 多目标优化问题的研究概述(Matlab代码实现)
  2. 乌隆他尼皇家大学举办第48届泰国大学生运动会新闻发布会
  3. 笔记本(win10、win7)开机在LOGO过后出现闪屏几下才进入系统成功解决问题步骤分享
  4. https://acs.jxnu.edu.cn/problem/GYM103495E
  5. 函数参数三种传递方式的区别
  6. 5年后端WEB开发者的开机必备软件
  7. 搭建嵌入式开源开发环境
  8. python爬取链家租房信息_Python爬取链家网上海市租房信息
  9. JPA 数据库添加数据报错:Cannot add or update a child row: a foreign key constraint fails
  10. 《出版专业基础》2015年版(初级)思考与练习 第六章