Java导入Excel文档傻瓜式教程

此方法导入的是制定文件内容的方式,内容不符返回提示,导入失败

1.工具类:

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.text.DateFormat;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.HashMap;

import java.util.Map;

import org.apache.log4j.Logger;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.DateUtil;

import org.apache.poi.ss.usermodel.Row;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

//读取文件方法,判断是否是Excel文件格式

public class ExcelUploadUtils {

// 日志

private final static Logger logger = Logger.getLogger(ExcelUploadUtils.class);

public static Workbook isExcelFile(String realPath, String filename) {

Workbook workbook = null;

try {

String ext = filename.substring(filename.lastIndexOf(".") + 1);// 获取文件扩展名

System.out.println("文件扩展名为:" + ext);

File file = new File(realPath+"/"+filename);

FileInputStream fis = new FileInputStream(file);// 使用文件输入流

if ("xls".equalsIgnoreCase(ext)) {

workbook = new HSSFWorkbook(fis);

fis.close();

logger.debug("系统读取到.xls格式文件");

} else if ("xlsx".equalsIgnoreCase(ext)) {

workbook = new HSSFWorkbook(fis);

fis.close();

logger.debug("系统读取到.xlsx格式文件");

} else {

fis.close();

logger.error("文件不是Excel的格式,返回null");

workbook = null;

}

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

logger.error("文件没有找到", e);

} catch (IOException e) {

e.printStackTrace();

}

return workbook;

}

//读取文件标题头

public static Map<Integer, Map<Integer, String>> readExcelTitle(Workbook workbook) {

Sheet sheet;

Row row;

if (workbook == null) {

logger.debug("Workbook对象为空!");

}

sheet = workbook.getSheetAt(0);

row = sheet.getRow(0);

int cells = row.getPhysicalNumberOfCells();// 标题总列数

System.out.println("标题总列数:" + cells);

String[] titles = new String[cells];

for (int i = 0; i < cells; i++) {

titles[i] = row.getCell(i).getStringCellValue();// 获取所有标题封装一个标题数组

}

// return titles;

System.out.println("获取标题头方法完毕,调用读取文件内容方法");

Map<Integer, Map<Integer, String>> content = readExcelContent( workbook,  sheet,  row);

return content;

}

//获取文件内容方法

public static Map<Integer, Map<Integer, String>> readExcelContent(Workbook workbook, Sheet sheet, Row row) {

Map<Integer, Map<Integer, String>> content = new HashMap<Integer, Map<Integer, String>>();

sheet = workbook.getSheetAt(0);// 文件第一页

int RowNum = sheet.getLastRowNum();// 总行数

System.out.println("总行数:"+RowNum);

row = sheet.getRow(0);// 第一行

int ColNum = row.getPhysicalNumberOfCells();// 总列数

for (int i = 1; i <= RowNum-2; i++) {

row = sheet.getRow(i); // 获取每行

int j = 0;

Map<Integer, String> cellValue = new HashMap<Integer, String>();// map装一行的所有单元格内容

while (j < ColNum) {

if (row != null) {

Object obj = getCellFormatValue(row.getCell(j));// 每一个单元格内容

if (obj != null) {

// 内容不为空,添加到集合中

cellValue.put(j, obj.toString());

} else {

// 内容为空,添加一个""

cellValue.put(j, "");

}

j++;

} else {

break;

}

content.put(i, cellValue);

}

}

return content;

}

//获取单元格内容方法

private static Object getCellFormatValue(Cell cell) {

Object cellvalue = null;

if (cell != null) {

int cellType = cell.getCellType();

switch (cellType) {

case Cell.CELL_TYPE_STRING:// 内容为字符串

cellvalue = cell.getRichStringCellValue().getString();

break;

case Cell.CELL_TYPE_BLANK:// 内容为空

cellvalue = "";

break;

case Cell.CELL_TYPE_NUMERIC:// 内容数字

if (DateUtil.isCellDateFormatted(cell)) {

// 是否为date类型,转换格式

 Date date = cell.getDateCellValue();

 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");

 cellvalue = format.format(date);

} else {

if(cell!=null ){

//设置单元格格式为字符串

cell.setCellType(Cell.CELL_TYPE_STRING);

}

//纯数字

 cellvalue = cell.getStringCellValue();

}

break;

}

} else {

cellvalue = "";

}

return cellvalue;

}

}

2.controller类:

 @ResponseBody

@RequestMapping(value = "/sys/importRegUser" , method = RequestMethod.POST , produces = "text/html; charset=utf-8")

public String importRegUser(HttpServletRequest req,@RequestParam("excelfile") MultipartFile mufile) {

int successnumber = 0;

String filename = mufile.getOriginalFilename();//获取文件名

String realPath = req.getRealPath("/upload");

logger.debug("批量白名单上传服务器路径:"+realPath);

if(realPath.isEmpty()){      //若未有文件夹就创建

File file = new File(realPath);

file.mkdirs();

}

File dest = new File(realPath + "/" + filename);//用文件绝对路径封装file对象

try {

mufile.transferTo(dest);//上传文件到服务器

logger.debug("文件上传成功");

} catch (IllegalStateException e) {

e.printStackTrace();

} catch (IOException e) {

logger.error("IOException",e);

}

Workbook workbook = ExcelUploadUtils.isExcelFile(realPath, filename);//获取文件对象

if (workbook != null) {

Sheet sheet = workbook.getSheetAt(0);

Row row = sheet.getRow(0);// 第一行

int cells = row.getPhysicalNumberOfCells();// 标题总列数

Cell cell = row.getCell(0);// 第一列

String firstResult = cell.toString();// 第一个单元格的内容

if (!firstResult.equals("停车场编号") || cells != 13) {

logger.debug("读取到的文件内容导入有误,第一个单元格内容为::" + firstResult);

//导入失败之后删除导入的文件

if(dest.exists()){

dest.delete();

}

return "{\"message\":\"notNeedFile\"}";

}

Map<Integer, Map<Integer, String>> contentMap = ExcelUploadUtils.readExcelTitle(workbook);//此方法内部调用了readExcelContent()方法,返回给一个map集合

if (contentMap.size() <= 0) {

logger.debug("文件中没有内容,批量添加失败");

//导入失败之后删除导入的文件

if(dest.exists()){

dest.delete();

}

return "{\"message\":\"fail\"}";

}else {

logger.debug("读取到excel文件数据Map" + contentMap);

for (int i = 1; i <= contentMap.size(); i++) {// 添加白名单到数据库

Map<Integer, String> map = contentMap.get(i);

if (contentMap.get(contentMap.size()).equals("") || contentMap.get(contentMap.size()).equals(null)) {

logger.debug("文件中到此行已经没有内容,终止读取。。。");

break;

}

String sysWriteDate = new SimpleDateFormat(

"yyyy-MM-dd HH:mm:ss").format(new Date());

TbRegisterUserS regUser = new TbRegisterUserS(map.get(1),

map.get(0), map.get(2), map.get(3), map.get(4), map

.get(5), map.get(6), map.get(7),

map.get(8), map.get(9), map.get(10), map.get(11),

map.get(12), sysWriteDate, 1);

String result = manySaveRegUser(regUser);

if (result.equals("{\"message\":\"success\"}")) {

successnumber += 1;

}

}

int failnumber = contentMap.size() - successnumber;

logger.debug("批量导入白名单成功!导入成功:" + successnumber + ",未成功:"+ failnumber + "");

//导入成功之后删除导入的文件

if(dest.exists()){

dest.delete();

}

return "{\"message\":\"success\"}";

}

} else {

logger.debug("系统未读取到文件,或者文件格式不是Excel");

System.out.println("文件不是Excel格式,路径是:"+dest.toString());

//导入失败之后删除导入的文件

if(dest.exists()){

dest.delete();

}

return "{\"message\":\"notExcelFile\"}";

     }

}

Public void manySaveRegUser(RegUser regUser){

     //存数据库方式略!

}

发布了6 篇原创文章 · 获赞 2 · 访问量 5181

猜你喜欢

转载自blog.csdn.net/qq_33435280/article/details/79037072
今日推荐