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

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

java poi实现Excel多级表头导出方式(多级表头,复杂表头)

《javapoi实现Excel多级表头导出方式(多级表头,复杂表头)》文章介绍了使用javapoi库实现Excel多级表头导出的方法,通过主代码、合并单元格、设置表头单元格宽度、填充数据、web下载... 目录Java poi实现Excel多级表头导出(多级表头,复杂表头)上代码1.主代码2.合并单元格3.

Python读取TIF文件的两种方法实现

《Python读取TIF文件的两种方法实现》本文主要介绍了Python读取TIF文件的两种方法实现,包括使用tifffile库和Pillow库逐帧读取TIFF文件,具有一定的参考价值,感兴趣的可以了解... 目录方法 1:使用 tifffile 逐帧读取安装 tifffile:逐帧读取代码:方法 2:使用