POI技术处理Excel表 .xls ..xlsx两种格式的导入操作

2024-03-17 09:32

本文主要是介绍POI技术处理Excel表 .xls ..xlsx两种格式的导入操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、说明

1、文章转载自:http://blog.csdn.net/onepersontz/article/details/49891405

原文标题====SpringMvc+POI 处理Excel的导入操作功能====

提到了ImportExcelUtil.java(Excel解析工具类)、UploadExcelControl.java (Spring控制器)、InfoVo.java(保存Excel数据对应的对象)、main.jsp(前端代码)以及配置文件web.xml、springmvc-servlet.xml(只做简单配置)、applicationContext-base.xml等。
2、本文只提Controller层、ImportExcelUtil工具类两部分,原文中这两部分导入功能可能会有一些小问题,具体可看原文网友评论。


3、我对原文导入部分代码进行略微修改后,导入功能已实际运用当中,没发现问题。

二、功能代码
首先先感谢下原文博主,然后上代码!!!!!
1、Controller层 

// 单号信息service
@Autowired
public OrderService orderService ;		//服务层改为自己的/*** 一键上传Excel表信息* * @author Justin* */@RequestMapping("order_add.action")public @ResponseBody List<String> uploadadd(MultipartFile myFile, HttpServletResponse res) throws IOException {List<String> errorList = new ArrayList<String>();try {ImportExcelUtil util = new ImportExcelUtil();	InputStream input = null;List<List<Object>> lists = null;if(myFile.isEmpty()) {log.error("文件不存在!");}else {if (errorList.size() == 0) {String fileName = myFile.getOriginalFilename();input = myFile.getInputStream(); lists = util.getBankListByExcel(input, fileName);input.close();//循环将excel中的数据存入库for(int i=1; i<lists.size(); i++) {List<Object> list = lists.get(i);Order order= new Order();	//实体类,改为自己的order.setOrderNumber(util.getFormat(String.valueOf(list.get(0))));order.setAddress(util.getFormat(String.valueOf(list.get(1))));order.setPhone(util.getFormat(String.valueOf(list.get(2))));orderService.add(order);	 		 }			 }}} catch (Exception e) {errorList.add("导入单号数据错误");e.printStackTrace();log.error("系统错误", e.fillInStackTrace());}return errorList;}

2、ImportExcelUtil工具类

package poi;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.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 ImportExcel {private final static String Excel_2003 =".xls";//2003版本的excelprivate final static String Excel_2007 =".xlsx";//2007版本的excelpublic List<List<Object>> getBankListByExcel(InputStream in,String fileName) throws Exception{List<List<Object>> list = null;//得到一个Excel工作薄Workbook work = this.getWorkbook(in, fileName);if(work==null) {throw new Exception("Excel工作薄为空");}Sheet sheet = null;Row row = null;Cell cell = null;list = new ArrayList<List<Object>>();//遍历Excel中所有的sheetfor(int i=0;i<work.getNumberOfSheets();i++) {//获得Excel中sheet工作表单sheet = work.getSheetAt(i);if(sheet==null) {continue;}//遍历当前sheet中所有的行//int total = sheet.getPhysicalNumberOfRows();//如果excel有格式,这种方式取值不准确int totalRow = sheet.getLastRowNum();for(int j=sheet.getFirstRowNum();j<totalRow;j++) {//获取一行row = sheet.getRow(j);if(row!=null && !"".equals(row)) {//获取第一个单元格的数据,判断是否存在Cell firstCell = row.getCell(0);if(firstCell!=null) {//遍历一行中每一列List<Object> li = new ArrayList<Object>();//int totalColumn = row.getLastCellNum();for(int y=row.getFirstCellNum();y<row.getLastCellNum();y++) {//获取每一格cell = row.getCell(y);String cellCal = this.getCellValue(cell)+"";li.add(cellCal);}list.add(li);}}}}in.close();return list;}public Workbook getWorkbook(InputStream in,String fileName) throws Exception {Workbook work = null;//获取文件类型xls或者xlsxString fileType = fileName.substring(fileName.lastIndexOf("."));if(Excel_2003.equals(fileType)) {work = new HSSFWorkbook(in);//2003  版本的Excel}else if(Excel_2007.equals(fileType)) {work = new XSSFWorkbook(in);}else {throw new Exception("解析文件格式有误");}return work;}/*** 对表格中的数据进行格式化* @param cell* @return*/public Object getCellValue(Cell cell) {Object value = null;DecimalFormat df1 = new DecimalFormat("0");//格式化number,string 字符串SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//日期格式化DecimalFormat df2 = new DecimalFormat("0.00");//格式化数字if(cell!=null && !"".equals(cell)) {switch(cell.getCellType()) {case Cell.CELL_TYPE_STRING:value = cell.getRichStringCellValue().getString();break;case Cell.CELL_TYPE_NUMERIC:if("General".equals(cell.getCellStyle().getDataFormatString())) {value = df1.format(cell.getNumericCellValue());}else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {value = sdf.format(cell.getDateCellValue());}else if(HSSFDateUtil.isCellDateFormatted(cell)) {Date date = cell.getDateCellValue();value = sdf.format(date);}else {value = df2.format(cell.getNumericCellValue());}break;case Cell.CELL_TYPE_BOOLEAN:value = cell.getBooleanCellValue();break;case Cell.CELL_TYPE_BLANK:value="";break;default:break;}}return value;}
}

 

这篇关于POI技术处理Excel表 .xls ..xlsx两种格式的导入操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/818559

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

mysql表操作与查询功能详解

《mysql表操作与查询功能详解》本文系统讲解MySQL表操作与查询,涵盖创建、修改、复制表语法,基本查询结构及WHERE、GROUPBY等子句,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随... 目录01.表的操作1.1表操作概览1.2创建表1.3修改表1.4复制表02.基本查询操作2.1 SE

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

Mysql常见的SQL语句格式及实用技巧

《Mysql常见的SQL语句格式及实用技巧》本文系统梳理MySQL常见SQL语句格式,涵盖数据库与表的创建、删除、修改、查询操作,以及记录增删改查和多表关联等高级查询,同时提供索引优化、事务处理、临时... 目录一、常用语法汇总二、示例1.数据库操作2.表操作3.记录操作 4.高级查询三、实用技巧一、常用语

MySQL追踪数据库表更新操作来源的全面指南

《MySQL追踪数据库表更新操作来源的全面指南》本文将以一个具体问题为例,如何监测哪个IP来源对数据库表statistics_test进行了UPDATE操作,文内探讨了多种方法,并提供了详细的代码... 目录引言1. 为什么需要监控数据库更新操作2. 方法1:启用数据库审计日志(1)mysql/mariad

springboot如何通过http动态操作xxl-job任务

《springboot如何通过http动态操作xxl-job任务》:本文主要介绍springboot如何通过http动态操作xxl-job任务的问题,具有很好的参考价值,希望对大家有所帮助,如有错... 目录springboot通过http动态操作xxl-job任务一、maven依赖二、配置文件三、xxl-

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.