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

相关文章

SpringBoot分段处理List集合多线程批量插入数据方式

《SpringBoot分段处理List集合多线程批量插入数据方式》文章介绍如何处理大数据量List批量插入数据库的优化方案:通过拆分List并分配独立线程处理,结合Spring线程池与异步方法提升效率... 目录项目场景解决方案1.实体类2.Mapper3.spring容器注入线程池bejsan对象4.创建

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Python正则表达式匹配和替换的操作指南

《Python正则表达式匹配和替换的操作指南》正则表达式是处理文本的强大工具,Python通过re模块提供了完整的正则表达式功能,本文将通过代码示例详细介绍Python中的正则匹配和替换操作,需要的朋... 目录基础语法导入re模块基本元字符常用匹配方法1. re.match() - 从字符串开头匹配2.

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python实现批量CSV转Excel的高性能处理方案

《Python实现批量CSV转Excel的高性能处理方案》在日常办公中,我们经常需要将CSV格式的数据转换为Excel文件,本文将介绍一个基于Python的高性能解决方案,感兴趣的小伙伴可以跟随小编一... 目录一、场景需求二、技术方案三、核心代码四、批量处理方案五、性能优化六、使用示例完整代码七、小结一、

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e