poi导入excel

Spring+SpringMVC+Maven+MyBatis+Mysql此环境下的POI导入

此文档讲解Excel导入的功能

1.1 POI导入excel

浏览器效果展示:

前端代码

前端Html代码:

<!-- 导入 -->

<div class="layui-inline">

<div class="layui-input-block" style="margin-left: 10px;">

<button type="button" permission="49" class="layui-btn layui-btn-small">

<input type="file" name="picture" id="picture">

</button>

</div>

</div>

<div class="layui-inline">

<div class="layui-input-block" style="margin-left: 10px;">

<button type="button" permission="49" id="scheduExcel" class="layui-btn layui-btn-small">Excel导入</button>

</div>

</div>

<!-- 导出 -->

<div class="layui-inline">

<div class="layui-input-block" style="margin-left: 10px;">

<button type="button" permission="49" id="exportExcel" class="layui-btn layui-btn-small">Excel导出</button>

</div>

</div>

Js代码

//JS校验form表单信息

<script>

function checkData() {

var fileDir = $("#picture").val();

var suffix = fileDir.substr(fileDir.lastIndexOf("."));

if("" == fileDir) {

alert("选择需要导入的Excel文件!");

return false;

}

if(".xls" != suffix && ".xlsx" != suffix) {

alert("选择Excel格式的文件导入!");

return false;

}

return true;

}

//Excel表格导入

var importExcelhospDeptDoc = function() {

if(!checkData()) {

return;

}

//表单传值

var form = new FormData(document.getElementById("excelScheduForm"));

$.ajax({

type: "post",

dataType: "json",

processData: false, //表单传值必须

contentType: false, //表单传值必须

url: "/importExcel/importShopingOrder",

data: form,

success: function(msg) {

//debugger;

if(msg.resultCode == 200) {

alert(msg.msg);

window.location.reload();

} else if(msg.resultCode == 400) {

alert(msg.msg);

document.getElementById("errorSoCode").innerText=msg.content;

document.getElementById("picture").value="";

}

}

});

}

//导入商城订单

$(‘#scheduExcel‘).on(‘click‘, function() {

importExcelhospDeptDoc();

});

</script>

 

 

依赖包注入(pom.xml)

<!-- poi Excel导入导出 -->

<dependency>

<groupId>org.apache.poi</groupId>

<artifactId>poi-ooxml</artifactId>

<version>3.9</version>

</dependency>

<dependency>

<groupId>commons-io</groupId>

<artifactId>commons-io</artifactId>

<version>2.4</version>

</dependency>

<!-- 上传文件 -->

<dependency>

<groupId>commons-fileupload</groupId>

<artifactId>commons-fileupload</artifactId>

<version>1.3.2</version>

</dependency>

Controller控制层

@ResponseBody

@RequestMapping(value = "/importShopingOrder", method = { RequestMethod.GET, RequestMethod.POST })

public Result uploadShopingOrder(HttpServletRequest request, MultipartFile picture, HttpSession session,HttpServletResponse response)

throws Exception {

Logger.info("临时表格数据导入:picture:" + picture);

Result result = new Result();

StringBuffer errorSoCode= new StringBuffer("出错订单号为:");

if (picture != null && picture.getOriginalFilename() != null && picture.getOriginalFilename().length() > 0) {

InputStream in = null;

List<List<Object>> listob = null;

in = picture.getInputStream();

listob = new ImportExcelUtil().getBankListByExcel(in, picture.getOriginalFilename(),1);

in.close();

UserBk user = (UserBk)session.getAttribute("users");

int flag = 0;

// 该处可调用service相应方法进行数据保存到数据库中,现只对数据输出

if(listob == null) {

result.setMsg("格式不符合要求");

result.setResultCode(400);

return result;

}

for (int i = 0; i < listob.size(); i++) {

List<Object> lo = listob.get(i);

ShoppingOrder shoppingOrder = new ShoppingOrder();

shoppingOrder.setSoCode(String.valueOf(lo.get(3)));

shoppingOrder.setSender("兑换码");

shoppingOrder.setSenderCode(String.valueOf(lo.get(10)));

//list.add(shoppingOrder);

shoppingOrder.setOperator(user.getuName());

int updateStatus = shoppingOrderService.updateShoppingOrderRecord(shoppingOrder);

if(updateStatus > 0 ){

//导入成功 推送已发货消息

scoreHistoryService.goodsDeliver(shoppingOrder.getSoCode(),3);

}else{

errorSoCode.append(lo.get(3)).append(",");

flag=2;

}

}

if(flag == 2) {

result.setContent(errorSoCode);

result.setMsg("部分订单发货失败,请查看页面中红色订单编号!");

result.setResultCode(400);

}else {

result.setMsg("导入成功");

result.setResultCode(200);

}

} else {

result.setMsg("表格不存在");

result.setResultCode(400);

}

return result;

}

ImportExcelUtil

package cn.medbridge.ss.utils;

import java.io.InputStream;

import java.text.DecimalFormat;

import java.text.SimpleDateFormat;

import java.util.ArrayList;

import java.util.List;

import javax.swing.plaf.basic.BasicComboBoxUI.ListDataHandler;

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;

/**

* Description:Excel表格导入工具类

*/

public class ImportExcelUtil {

/**

* 日志监控

*/

// private static Logger Logger =

// LogManager.getLogger(ImportExcelUtil.class);

private final static String excel2003L = ".xls"; // 2003-版本的Excel

private final static String excel2007U = ".xlsx"; // 2007+版本的Excel

/**

* @Description:获取IO流中的数据,组装成List<List<Object>>对象

*

* @auther:liang.ma

* @param in

* @param fileName

* @return

* @throws Exception

* @time:2017年9月13日下午4:38:07

*/

public List<List<Object>> getBankListByExcel(InputStream in, String fileName,int type) throws Exception {

List<List<Object>> list = null;

// 创建Excel工作薄

Workbook work = this.getWorkbook(in, fileName);

if (null == work) {

throw new Exception("创建Excel工作薄为空!");

}

Sheet sheet = null;

Row row = null;

Cell cell = null;

list = new ArrayList<List<Object>>();

// 遍历Excel中所有的sheet

for (int i = 0; i < work.getNumberOfSheets(); i++) {

sheet = work.getSheetAt(i);

if (sheet == null) {

continue;

}

// 遍历当前sheet中的所有行

for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) {

row = sheet.getRow(j);

if (row == null || row.getFirstCellNum() == j) {

continue;

}

// 遍历所有的列

List<Object> li = new ArrayList<Object>();

for (int y = row.getFirstCellNum(); y < row.getLastCellNum(); y++) {

cell = row.getCell(y);

if(type == 1) {

if (cell != null && cell .getCellType() != Cell.CELL_TYPE_BLANK) {

li.add(this.getCellValue(cell));

}else {

list = null;

return list;

}

}else {

if (cell != null && cell .getCellType() != Cell.CELL_TYPE_BLANK) {

li.add(this.getCellValue(cell));

}

}

}

if (li != null && li.size() >0) {

list.add(li);

}

}

}

// work.close();

return list;

}

/**

* @Description:根据文件后缀,自适应上传文件的版本

* @auther:liang.ma

* @param inStr

* @param fileName

* @return

* @throws Exception

* @time:2017年9月13日下午4:38:21

*/

public Workbook getWorkbook(InputStream inStr, String fileName) throws Exception {

Workbook wb = null;

String fileType = fileName.substring(fileName.lastIndexOf("."));

if (excel2003L.equals(fileType)) {

wb = new HSSFWorkbook(inStr); // 2003-

} else if (excel2007U.equals(fileType)) {

wb = new XSSFWorkbook(inStr); // 2007+

} else {

throw new Exception("解析的文件格式有误!");

}

return wb;

}

/**

* @Description:对表格中数值进行格式化

* @auther:liang.ma

* @param cell

* @return

* @time:2017年9月13日下午4:38:33

*/

public Object getCellValue(Cell cell) {

Object value = null;

DecimalFormat df = new DecimalFormat("0"); // 格式化number String字符

SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); // 日期格式化

DecimalFormat df2 = new DecimalFormat("0.00"); // 格式化数字

if (cell != null) {

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 = df.format(cell.getNumericCellValue());

} else if ("m/d/yy".equals(cell.getCellStyle().getDataFormatString())) {

value = sdf.format(cell.getDateCellValue());

} 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;

} else {

return "";

}

}

}

Service业务逻辑层

Service层:

/**

* 商城订单导入更新记录 单条更新

* @param shoppingOrder

* @return

*/

int updateShoppingOrderRecord(ShoppingOrder shoppingOrder);

service实现类

/**

* 商城订单导入单条更新记录

*/

@Override

public int updateShoppingOrderRecord(ShoppingOrder shoppingOrder) {

return shoppingOrderMapper.updateShoppingOrderRecord(shoppingOrder);

}

Mapper持久层

//商城订单导入更新记录 单条

int updateShoppingOrderRecord(ShoppingOrder shoppingOrder);

XML配置层

<!-- 单条更新商城订单  -->

<update id="updateShoppingOrderRecord" parameterType="cn.medbridge.ss.model.ShoppingOrder">

UPDATE ss_shopping_order sso

set sso.sender = #{sender,jdbcType=VARCHAR},

sso.sender_code = #{senderCode,jdbcType=VARCHAR},

sso.operator = #{operator,jdbcType=VARCHAR},

sso.so_status = 3

WHERE sso.so_code = #{soCode,jdbcType=VARCHAR}

AND sso.so_status = 4

</update>

原文地址:https://www.cnblogs.com/banyuexiangsi/p/9680830.html

时间: 2024-11-09 18:00:41

poi导入excel的相关文章

Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件. 2.excel定义成模板,里面只填写了所需要的数据,有可能数据有问题. 3.在导入的时候就需要对每个excel单元格的数据进行验证. 4.验证完之后,若所有数据正确,那么批量保存.若有一点点错误,就不执行保存操作,并提示错误原因. 思路: 1.完美使用了Map的功能,先将xml中的数据存入map

使用POI导入Excel并解决Cannot get a text value from a numeric formula cell

最近做Excel导入 有两个方法:JXL 和POI 各有问题:JXL 导入:文件中有宏就报错,找不到解决方法. POI导入:文件太大造成内存溢出. 先说问题 :Exception in thread "main" java.lang.IllegalStateException: Cannot get a text value from a numeric formula cell 这个问题是因为那一单元格使用了 "求和函数",内容不是文本. package cmcc

Java poi导入excel(合并单元格的excel)(转)

poi导入excel代码示例 原文地址:https://mbd.baidu.com/newspage/data/landingshare?pageType=1&isBdboxFrom=1&context=%7B%22nid%22%3A%22news_9588929214493290157%22%2C%22sourceFrom%22%3A%22bjh%22%7D 原文地址:https://www.cnblogs.com/zbq6/p/12501683.html

java poi导入EXCEL

import jxl.DateCell; import jxl.NumberCell; import org.apache.log4j.Logger; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.use

java poi 导入excel

最近项目需要导入excel,网上有很多例子,自己整合记录下,兼容2003和2007,暂时没有添加图片处理功能. 所需jar包  http://pan.baidu.com/s/1sjPuWDR package example.poi; import java.io.*; import java.text.DecimalFormat; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.ss.usermodel.*; impor

Java POI导入Excel文件

今天在公司需要做个导入Excel文件的功能,所以研究了一下,参考网上的一些资料总算是做出来了,在此记录一下防止以后忘记怎么弄. 本人用的是poi3.8,所以需要的JAR包如下: poi-3.8.jar poi-excelant-3.8-20120326.jar poi-ooxml-3.8-20120326.jar poi-ooxml-schemas-3.8-20120326.jar poi-scratchpad-3.8-20120326.jar xmlbeans-2.3.0.jar 附上百度云盘

使用POI导入Excel异常Cannot get a text value from a numeric cell 解决

POI操作Excel时因为Excel数据Cell有不同的类型,会出现Cannot get a text value from a numeric cell的异常错误. 异常原因:Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串并写入数据库时,就会出现Cannot get a text value from a numeric cell的异常错误. 此异常常见于类似如下代码中:row.getCell(i).getStringCellValue(): 解决办法:

poi 导入excel 数据转对象

package org.rui.xls; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.lang.reflect.Field; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.Iterator; import java.

使用回调方式写POI导入excel工具类

场景是这样的:为了做一个excel导入的功能,为了尽可能的写一个通用的工具类,将与poi有关的东西都封装起来,以便以其他人员只用关心自己的业务,不用和poi打交道. 写到最后,现在还是会有poi的东西暴漏出来一点,暴漏出来的这个应该是必须的. 为了模拟这个场景,先写两个service方法,用于和数据库交互,存入从模板中读取的数据.代码如下: 1.berthservice public class BerthService { public void update(){ System.out.pr