求springmvc导入导出Excel的例子,越全面越好。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求springmvc导入导出Excel的例子,越全面越好。相关的知识,希望对你有一定的参考价值。

参考技术A 一.导入excel
(1)使用spring上传文件
a.前台页面提交
<form name="excelImportForm" action="$pageContext.request.contextPath/brand/importBrandSort" method="post" onsubmit="return checkImportPath();" enctype="multipart/form-data" id="excelImportForm">
<input type="hidden" name="ids" id="ids">
<div class="modal-body">
<div class="row gap">
<label class="col-sm-7 control-label"><input class="btn btn-default" id="excel_file" type="file" name="filename" accept="xls"/></label>
<div class="col-sm-3">

<input class="btn btn-primary" id="excel_button" type="submit" value="导入Excel"/>
</div>
</div>

</div>

<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" onClick="uncheckBoxes();">取消</button>
</div>

在提交前可进行一些判断,可查看:
http://blog.csdn.net/kingson_wu/article/details/38928827
b.后台spring的controller进行相关操作,这里主要讲的是使用spring上传文件,和读取文件信息,可以参考这两篇文章:
http://endual.iteye.com/blog/1810170
http://dakulaliu.iteye.com/blog/236235
使用spring上传文件之前,需要配置bean
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
@RequestMapping(value = "/importBrandSort", method = RequestMethod.POST)
public ModelAndView importBrandSort(@RequestParam("filename") MultipartFile file,
HttpServletRequest request,HttpServletResponse response) throws Exception
String temp = request.getSession().getServletContext()
.getRealPath(File.separator)
+ "temp"; // 临时目录
File tempFile = new File(temp);
if (!tempFile.exists())
tempFile.mkdirs();

DiskFileUpload fu = new DiskFileUpload();
fu.setSizeMax(10 * 1024 * 1024); // 设置允许用户上传文件大小,单位:位
fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:位
fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录
// 开始读取上传信息
// int index = 0;
/* List fileItems = null;
try
fileItems = fu.parseRequest(request);
catch (Exception e)
e.printStackTrace();

Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件
FileItem fileItem = null;
while (iter.hasNext())
FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息
if (!item.isFormField())
fileItem = item;
// index++;



if (fileItem == null)
return null;
*/
if (file == null)
return null;
logger.info(file.getOriginalFilename());

String name = file.getOriginalFilename();// 获取上传文件名,包括路径
//name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名
long size = file.getSize();
if ((name == null || name.equals("")) && size == 0)
return null;
InputStream in = file.getInputStream();
List<BrandMobileInfoEntity> BrandMobileInfos = brandService
.importBrandPeriodSort(in);

// 改为人工刷新缓存KeyContextManager.clearPeriodCacheData(new
// PeriodDimensions());// 清理所有缓存
int count = BrandMobileInfos.size();
String strAlertMsg ="";
if(count!=0)
strAlertMsg= "成功导入" + count + "条!";
else
strAlertMsg = "导入失败!";

logger.info(strAlertMsg);
//request.setAttribute("brandPeriodSortList", BrandMobileInfos);
//request.setAttribute("strAlertMsg", strAlertMsg);

request.getSession().setAttribute("msg",strAlertMsg);
return get(request, response);
//return null;


代码中的注释部分是如果不使用spring的方式,如何拿到提交过来的文件名(需要是要apache的一些工具包),其实使用spring的也是一样,只是已经做好了封装,方便我们写代码。
代码中的后半部分是读取完上传文文件的信息和对数据库进行更新之后,输出到前台页面的信息。
这里给页面设置session信息,前台检测session提示是否导入成功。具体可参考:
http://blog.csdn.net/kingson_wu/article/details/38926771
上述代码中:
InputStream in = file.getInputStream();
List<BrandMobileInfoEntity> BrandMobileInfos = brandService
.importBrandPeriodSort(in);

读取excel的信息。
(2)使用poi读取excel
a.更新数据库
@Override
public List<BrandMobileInfoEntity> importBrandPeriodSort(InputStream in) throws Exception

List<BrandMobileInfoEntity> brandMobileInfos = readBrandPeriodSorXls(in);
for (BrandMobileInfoEntity brandMobileInfo : brandMobileInfos)
mapper.updateByConditions(brandMobileInfo);

return brandMobileInfos;


这部分是sevice层的代码,用于读取excel信息之后更新数据库数据,我这里是使用mybatis。定义一个类BrandMobileInfoEntity,用与保存excel表每一行的信息,而List< BrandMobileInfoEntity >则保存了全部信息,利用这些信息对数据库进行更新。追问

我也搜到了这个,请问POI是什么?怎么使用?

Java+EasyExcel实现文件导入导出

Java+EasyExcel实现文件导入导出

引言

项目中需要Excel文件的导入与导出Excel并下载,例如,导入员工信息,导出员工信息,手动输入比较繁琐,所以本篇博文教大家如何在Java中导入Excel文件与导出Excel文件

技术栈Excel工具:EasyExcel选用框架:Spring、Spring MVC、MyBatis(SSM)项目构建管理工具:Maven需求:

  1. 要求利用excel工具实现员工信息的导入与导出
  2. 导出要求为输出到指定位置并下载
  3. 导入文件导入后,存入数据库,并显示在页面
  4. 导出文件,点击导出后写入指定地址,并下载该文件

效果图

Java+EasyExcel实现文件导入导出_数据库

项目结构

Java+EasyExcel实现文件导入导出_spring_02

核心源码

导入阿里巴巴EasyExcel依赖

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>2.1.6</version>
</dependency>

这里采用EasyExcel,为什么不采用POI呢?

因为EasyExcel是对POI做的一个升级,POI相对于笨重,EasyExcel去除了一些POI比较繁琐的东西,所以EasyExcel比较轻量级,所以本文采用EasyExcel

EasyExcel是阿里巴巴的产品,POI是Apache基金会的开源产品,EasyExcel对POI做了一个升级

核心实体类

package com.wanshi.spring.entity;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Employee

@ExcelIgnore
private String noid;

@ColumnWidth(20)
@ExcelProperty("员工姓名")
private String emp_name;

@ColumnWidth(20)
@ExcelProperty("员工年龄")
private Integer emp_age;

@ExcelIgnore
private Integer emp_sex;

//冗余字段
@ColumnWidth(20)
@ExcelProperty("员工性别")
private String str_emp_sex;

@ColumnWidth(20)
@ExcelProperty("员工工资")
private Double emp_salary;

@ColumnWidth(20)
@ExcelProperty("员工住址")
private String emp_address;

@ColumnWidth(20)
@ExcelProperty("员工岗位")
private String emp_position;

//分页相关,当前页与每页的数据条数
@ExcelIgnore
private Integer pageNum;
@ExcelIgnore
private Integer pageSize;

核心监听器类

EmployeeListener类:

package com.wanshi.spring.listener;

import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.wanshi.spring.entity.Employee;

import java.util.ArrayList;
import java.util.List;

public class EmployeeReadListener extends AnalysisEventListener<Employee>

//员工集合
private static List<Employee> employeeList = new ArrayList<>();

// 每读一样,会调用该invoke方法一次
@Override
public void invoke(Employee data, AnalysisContext context)
employeeList.add(data);
System.out.println("解析到一条数据:" + data);


// 全部读完之后,会调用该方法
@Override
public void doAfterAllAnalysed(AnalysisContext context)
System.out.println("全部解析完成");


/**
* 返回读取到的员工集合
* @return
*/
public static List<Employee> getStudentList()
return employeeList;


EasyExcel导入文件

Test测试类实现文件导入并存入数据库

@Test
public void test1()
ExcelReaderBuilder workBook = EasyExcel.read
("C:\\\\Users\\\\王会称\\\\Desktop\\\\员工.xlsx", Employee.class, new EmployeeReadListener());

// 封装工作表
ExcelReaderSheetBuilder sheet1 = workBook.sheet();
// 读取
sheet1.doRead();

//写入数据库
List<Employee> studentList = EmployeeReadListener.getStudentList();
for (Employee employee : studentList)
employee.setNoid(PbSecretUtils.uuid());
employeeMapper.insert(employee);

通过页面点击导入文件并存入数据库

EmployeeController类:

@PostMapping("/import_employee_excel")
public String importEmployeeExcel(MultipartFile emp_excel)
employeeService.importExcel(emp_excel);
return "redirect:/employee/list";

EmployeeService类:

/**
* 获取用户选择的文件并将文件存入指定位置再将数据存入数据库
* @param emp_excel
* @return
*/
public Integer importExcel(MultipartFile emp_excel)
try
String fileName = FileUploadUtil.upload(emp_excel, "");
ExcelReaderBuilder workBook = EasyExcel.read
(GlobalSet.upload_url+fileName, Employee.class, new EmployeeReadListener());

// 封装工作表
ExcelReaderSheetBuilder sheet1 = workBook.sheet();
// 读取
sheet1.doRead();

List<Employee> studentList = EmployeeReadListener.getStudentList();
Java怎样将数据库中数据导出为Excel文件,求完整例子附带数据库。

SpringMvc 使用poi导入导出Excel

java spring MVC 用poi做Excel导入碰到一个问题,求大神指教,有关下拉框的问题

Excel导入导出例子

Java+EasyExcel实现文件导入导出

为啥在本地可以导出Excel表,但是一上传服务器就不行了,导出的表里没有数据 求解答