本项目基于SSM框架,简单封装了Excel批量导入导出功能,不用建数据库表一键导入导出Excel,不过这样只适用于对导入的Excel表进行转换,通过模板导出Excel并且能实现导入多个sheet表。上一篇介绍了建表导入导出Excel(点击跳转)
一、下载poi jar包:
点这里下载:poi 3.8/3.9/3.10三个版本下载
poi 3.17最新版本下载
二、基本操作步骤:
首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(页/表)(HSSFSheet)组成,一个sheet是由多个row(行)(HSSFRow)组成,一个row是由多个cell(单元格)(HSSFCell)组成。
1、用HSSFWorkbook打开或者创建“Excel文件对象”
2、用HSSFWorkbook对象返回或者创建Sheet对象
3、用Sheet对象返回行对象,用行对象得到Cell对象
4、对Cell对象读写。
然后需要先新建一个Excel文件,格式样式表头标题编辑好,放入到项目中,下面是我的路径。
WEB-INF/jsp/purchasing/orderExcel/Excel.xls
三、控制层Controller按照模板导出Excel
解决:MultipartFile文件或者图片上传一直为null问题
/**
* 导出销售订单数据
* @param myFile
* @param respon
* @return
* @throws IOException
*/
@RequestMapping(value = "export", method=RequestMethod.POST)
public ModelAndView exportFile(@RequestParam(value="file",required=false)MultipartFile myFile,HttpServletResponse response,HttpServletRequest request)throws IOException {
ModelAndView mv = this.getModelAndView();
try {
ImportExcelUtil util = new ImportExcelUtil();
InputStream input = null;
List<List<Object>> lists = null;
if (myFile.isEmpty()) {
logBefore(logger, "导入文件为空,请先添加Excel文件!");
} else {
String fileName = myFile.getOriginalFilename();
input = myFile.getInputStream();
//实现多sheet页批量导入Excel读取数据存入lists
lists = util.getBankListByExcel(input, fileName);
input.close();
//引入导出Excel路径
File fi = new File(request.getSession().getServletContext().getRealPath("/") + "WEB-INF/jsp/purchasing/orderExcel/Excel.xls");
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(fi));
//读取excel模板
HSSFWorkbook wb = new HSSFWorkbook(fs);
//读取了模板内所有sheet内容
HSSFSheet sheet = wb.getSheetAt(0);
//如果这行没有了,整个公式都不会有自动计算的效果的
sheet.setForceFormulaRecalculation(true);
// 循环将excel中的数据存入库
for (int i = 1; i < lists.size(); i++) {
List<Object> list = lists.get(i);
HSSFRow dataRow = sheet.createRow((int) i + 1);
dataRow.createCell(0).setCellValue(util.getFormat(String.valueOf(list.get