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

相关文章

Java堆转储文件之1.6G大文件处理完整指南

《Java堆转储文件之1.6G大文件处理完整指南》堆转储文件是优化、分析内存消耗的重要工具,:本文主要介绍Java堆转储文件之1.6G大文件处理的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言文件为什么这么大?如何处理这个文件?分析文件内容(推荐)删除文件(如果不需要)查看错误来源如何避

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Java docx4j高效处理Word文档的实战指南

《Javadocx4j高效处理Word文档的实战指南》对于需要在Java应用程序中生成、修改或处理Word文档的开发者来说,docx4j是一个强大而专业的选择,下面我们就来看看docx4j的具体使用... 目录引言一、环境准备与基础配置1.1 Maven依赖配置1.2 初始化测试类二、增强版文档操作示例2.

Ubuntu 24.04启用root图形登录的操作流程

《Ubuntu24.04启用root图形登录的操作流程》Ubuntu默认禁用root账户的图形与SSH登录,这是为了安全,但在某些场景你可能需要直接用root登录GNOME桌面,本文以Ubuntu2... 目录一、前言二、准备工作三、设置 root 密码四、启用图形界面 root 登录1. 修改 GDM 配

MyBatis-Plus通用中等、大量数据分批查询和处理方法

《MyBatis-Plus通用中等、大量数据分批查询和处理方法》文章介绍MyBatis-Plus分页查询处理,通过函数式接口与Lambda表达式实现通用逻辑,方法抽象但功能强大,建议扩展分批处理及流式... 目录函数式接口获取分页数据接口数据处理接口通用逻辑工具类使用方法简单查询自定义查询方法总结函数式接口

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

使用Python删除Excel中的行列和单元格示例详解

《使用Python删除Excel中的行列和单元格示例详解》在处理Excel数据时,删除不需要的行、列或单元格是一项常见且必要的操作,本文将使用Python脚本实现对Excel表格的高效自动化处理,感兴... 目录开发环境准备使用 python 删除 Excphpel 表格中的行删除特定行删除空白行删除含指定

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核