第一个版本,基础版
package org.ctzk.jcpc.utils;
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;
import org.ctzk.utils.DateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* com.lzctzk.guidepost.util
* excel操作工具类
* @author luozhen
* @version V1.0
* @date 2020-2-1 17:56
* @description
*/
public class ExcelUtilOld {
private static final Logger log = LoggerFactory.getLogger(ExcelUtilOld.class);
private static SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
/**
* 获取xlsx文件内容某个sheet(从0开始)的内容,以二维数组形式返回
*
* @param fileAbsolutePath xlsx文件的绝对路径
* @return xlsx文件的文本内容
*/
public static List<List<String>> getExcelData(String fileAbsolutePath) {
/*
* workbook:工作簿,就是整个Excel文档
* sheet:工作表
* row:行
* cell:单元格
*/
File file = new File(fileAbsolutePath);
InputStream inputStream = null;
//默认从第一个sheet开始读取
int bookIndex = 0;
try {
//文件
inputStream = new FileInputStream(file);
Workbook book = null;
if (fileAbsolutePath.endsWith(".xlsx")) {
book = new XSSFWorkbook(inputStream);
} else if (fileAbsolutePath.endsWith(".xls")) {
book = new HSSFWorkbook(inputStream);
}
if (bookIndex >= book.getNumberOfSheets()) {
log.error("获取表格数据错误: bookIndex={},sheet的下标超出范围 ", bookIndex);
return null;
}
//sheet从0开始
Sheet sheet = book.getSheetAt(bookIndex);
//取得最后一行的行号
int rowNum = sheet.getLastRowNum() + 1;
//每行的最后一个单元格位置(默认选取第一行的长度)
int cellNum = sheet.getRow(0).getLastCellNum();
//创建二维数组保存所有读取到的行列数据,外层存行数据,内层存单元格数据
List<List<String>> lists = new ArrayList<List<String>>();
//设置读取开始的行数,从0(第一行)开始
//第三层
int startIndex = 2;
//开始进行读取
for (int rowIndex = startIndex; rowIndex < rowNum; rowIndex++) {
//行
Row row = sheet.getRow(rowIndex);
if (null != row) {
List<String> cellList = new ArrayList<String>();
for (int cellIndex = 0; cellIndex < cellNum; cellIndex++) {
Cell cell = row.getCell(cellIndex);
cellList.add(cellValueFormat(cell));
}
lists.add(cellList);
}
}
return lists;
} catch (FileNotFoundException fe) {
log.error("获取表格数据错误: FileNotFoundException", fe);
} catch (IOException ie) {
log.error("获取表格数据错误: IOException", ie);
} finally {
if (null != inputStream) {
try {
inputStream.close();
} catch (Exception e) {
log.error("获取表格数据关闭IO流异常", e);
}
}
}
return null;
}
/**
* 表格数据格式化
* @param cell
* @return
*/
private static String cellValueFormat(Cell cell){
String cellValue = null;
if(null != cell){
switch (cell.getCellType()){
case _NONE:
break;
//数值型
case NUMERIC:
//判断是日期类型
if (HSSFDateUtil.isCellDateFormatted(cell)) {
//获取成DATE类型
Date dt = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());
cellValue = dateformat.format(dt);
}else{
//转化电话号码和身份证号码为字符串
DecimalFormat df = new DecimalFormat("#");
cellValue = String.valueOf(df.format(cell.getNumericCellValue()));
}
break;
//字符串型
case STRING:
cellValue = cell.getStringCellValue();
break;
//空值
case BLANK:
break;
//布尔型
case BOOLEAN:
cellValue = String.valueOf(cell.getBooleanCellValue());
break;
//公式型
case FORMULA:
cellValue = cell.getCellFormula();
break;
//错误
case ERROR:
break;
default:
}
}
return cellValue;
}
/**
* 保存上传的文件
* @param multipartFile
* @return
* @throws Exception
*/
public static String keepExcel(MultipartFile multipartFile)throws Exception{
//文件参数整理
//原始文件名
String myFileName = multipartFile.getOriginalFilename();
//文件大小
String fileSize = multipartFile.getSize() + "";
//文件名
String fileNme = myFileName.substring(0, myFileName.lastIndexOf("."));
//获取文件的后缀名
String fileType = myFileName.substring(myFileName.lastIndexOf(".") + 1);
//存储文件名(加上时间是为了保证文件的唯一名称)
String saveName = fileNme + "-" + DateUtil.getStringAllDate();
//存储文件全名称(压缩图片文件名)
String saveFullName = saveName + "." + fileType;
//创建存储文件夹
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
String date = sdf.format(new Date());
//存储文件夹路径
//String fileFolder = "E:/Collection/files/" + date;
String fileFolder = "/var/files/" + date;
//相对存储路径
String fileFpfName = fileFolder + "/" + saveFullName;
File folder = new File(fileFolder);
if (!folder.exists()) {
folder.mkdirs();
}
//创建文件
String filePath = "";
filePath = fileFolder + "/" + saveFullName;
File diskFile = new File(filePath);
//写入文件
multipartFile.transferTo(diskFile);
//创建文件 不用检查文件是否存在,UUID能保证文件名的不重复性
diskFile.createNewFile();
return fileFpfName;
}
}