导入excel表格工具类
程序员文章站
2022-07-10 18:30:17
...
导入excel表格工具类
public BWJsonResult readExcel(MultipartFile excelFile){
List<ArrayList<String>> productList = new ImportExcel().read(excelFile);
}
package com.baiwang.cloud.common.util;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
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.ss.usermodel.WorkbookFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
/**
* @描述:测试excel读取 导入的jar包
* <p>
* poi-3.8-beta3-20110606.jar
* <p>
* poi-ooxml-3.8-beta3-20110606.jar
* <p>
* poi-examples-3.8-beta3-20110606.jar
* <p>
* poi-excelant-3.8-beta3-20110606.jar
* <p>
* poi-ooxml-schemas-3.8-beta3-20110606.jar
* <p>
* poi-scratchpad-3.8-beta3-20110606.jar
* <p>
* xmlbeans-2.3.0.jar
* <p>
* dom4j-1.6.1.jar
* <p>
* jar包官网下载地址:http://poi.apache.org/download.html
* <p>
* 下载poi-bin-3.8-beta3-20110606.zipp
*/
public class ImportExcel {
private static final Logger logger = LoggerFactory.getLogger(ImportExcel.class);
/**
* 总行数
*/
private int totalRows = 0;
/**
* 总列数
*/
private int totalCells = 0;
/**
* 错误信息
*/
private String errorInfo;
/**
* 构造方法
*/
public ImportExcel() {
}
/**
* @描述:得到总行数
* @参数:@return
* @返回值:int
*/
public int getTotalRows() {
return totalRows;
}
/**
* @描述:得到总列数
* @参数:@return
* @返回值:int
*/
public int getTotalCells() {
return totalCells;
}
/**
* @描述:得到错误信息
* @参数:@return
* @返回值:String
*/
public String getErrorInfo() {
return errorInfo;
}
/**
* @描述:验证excel文件
* @参数:@param filePath 文件完整路径
* @参数:@return
* @返回值:boolean
*/
public boolean validateExcel(String filePath) {
/** 检查文件名是否为空或者是否是Excel格式的文件 */
if (filePath == null || !(this.isExcel2003(filePath) || this.isExcel2007(filePath))) {
errorInfo = "文件名不是excel格式";
return false;
}
/** 检查文件是否存在 */
File file = new File(filePath);
if (file == null || !file.exists()) {
errorInfo = "文件不存在";
return false;
}
return true;
}
/**
* @描述:根据文件名读取excel文件
* @参数:@param filePath 文件完整路径
* @参数:@return
* @返回值:List
*/
public List<ArrayList<String>> read(MultipartFile file) throws IOException, InvalidFormatException {
Workbook wb = WorkbookFactory.create(file.getInputStream());
return this.read(wb);
}
/**
* @描述:读取数据
* @参数:@param Workbook
* @参数:@return
* @返回值:List<List<String>>
*/
private List<ArrayList<String>> read(Workbook wb) {
List<ArrayList<String>> dataLst = new ArrayList<ArrayList<String>>();
/** 得到第一个shell */
Sheet sheet = wb.getSheetAt(0);
/** 得到Excel的行数 */
this.totalRows = sheet.getPhysicalNumberOfRows();
/** 得到Excel的列数 */
if (this.totalRows >= 1 && sheet.getRow(1) != null) {
this.totalCells = sheet.getRow(1).getPhysicalNumberOfCells();
}
/** 循环Excel的行 */
for (int r = 1; r < this.totalRows; r++) {
Row row = sheet.getRow(r);
if (row == null) {
continue;
}
ArrayList<String> rowLst = new ArrayList<String>();
/** 循环Excel的列 */
for (int c = 0; c < this.getTotalCells(); c++) {
Cell cell = row.getCell(c);
String cellValue = "";
if (null != cell) {
// 以下是判断数据的类型
switch (cell.getCellType()) {
case Cell.CELL_TYPE_NUMERIC: // 数字
DecimalFormat df = new DecimalFormat("#.##");
cellValue = df.format(cell.getNumericCellValue());
String strArr = cellValue.substring(cellValue.lastIndexOf(".") + 1, cellValue.length());
if (strArr.equals("00")) {
cellValue = cellValue.substring(0, cellValue.lastIndexOf("."));
}
break;
case Cell.CELL_TYPE_STRING: // 字符串
cellValue = cell.getStringCellValue();
break;
case Cell.CELL_TYPE_BOOLEAN: // Boolean
cellValue = cell.getBooleanCellValue() + "";
break;
case Cell.CELL_TYPE_FORMULA: // 公式
cellValue = cell.getCellFormula() + "";
break;
case Cell.CELL_TYPE_BLANK: // 空值
cellValue = "";
break;
case Cell.CELL_TYPE_ERROR: // 故障
cellValue = "非法字符";
break;
default:
cellValue = "未知类型";
break;
}
}
rowLst.add(cellValue);
}
/** 保存第r行的第c列 */
dataLst.add(rowLst);
}
return dataLst;
}
/**
* @描述:是否是2003的excel,返回true是2003
* @参数:@param filePath 文件完整路径
* @参数:@return
* @返回值:boolean
*/
public static boolean isExcel2003(String filePath) {
return filePath.matches("^.+\\.(?i)(xls)$");
}
/**
* @描述:是否是2007的excel,返回true是2007
* @参数:@param filePath 文件完整路径
* @参数:@return
* @返回值:boolean
*/
public static boolean isExcel2007(String filePath) {
return filePath.matches("^.+\\.(?i)(xlsx)$");
}
}
下一篇: redis的使用
推荐阅读
-
Excel不只是一个简单的表格工具还有你不了解的神奇作用
-
把Excel上的数据表格导入到word中以方便计算
-
Excel表格数据导入数据库users表中,利用excel公式自动生成sql语句方法
-
【tp5.1】通过PHPExcel实现导入excel表格
-
借助Excel高级工具箱实现在EXCEL2007表格中批量插入图片
-
钉钉怎么导入外部的excel表格数据?
-
结合bootstrap fileinput插件和Bootstrap-table表格插件,实现文件上传、预览、提交的导入Excel数据操作流程
-
java反射构建excel导出工具类
-
将TXT文件中的内容正确导入到Excel表格中不混乱的方法
-
需要出试卷利用文字转换成表格功能将Word试卷快速导入Excel