Java读取Excel文件
程序员文章站
2022-05-08 08:53:23
...
使用poi插件解析Excel文件
package com; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.nio.charset.Charset; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; 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.springframework.stereotype.Component; import com.csvreader.CsvReader; import com.elin.csp.model.shopUser.entity.ShopUser; @Component public class InputExcelFileService { /** 总行数 */ private int totalRows = 0; /** 总列数 */ private int totalCells = 0; /** 错误信息 */ private String errorInfo; /** 构造方法 */ public InputExcelFileService() { } /** * * @描述:得到总行数 * * @时间:2011-8-9 下午04:27:34 * * @参数:@return * * @返回值:int */ public int getTotalRows() { return totalRows; } /** * * @描述:得到总列数 * * @时间:2011-8-9 下午04:27:45 * * @参数:@return * * @返回值:int */ public int getTotalCells() { return totalCells; } /** * * @描述:得到错误信息 * * @时间:2011-8-9 下午04:28:17 * * @参数:@return * * @返回值:String */ public String getErrorInfo() { return errorInfo; } /** * * @描述:验证excel文件 * * @时间:2011-8-9 下午04:06:47 * * @参数:@param fileName * * @参数:@return * * @返回值:boolean */ public boolean validateExcel(String fileName) { /** 检查文件名是否为空或者是否是Excel格式的文件 */ if (fileName == null || !(WDWUtil.isExcel2003(fileName) || WDWUtil .isExcel2007(fileName))) { errorInfo = "文件名不是excel格式"; return false; } /** 检查文件是否存在 */ File file = new File(fileName); if (file == null || !file.exists()) { errorInfo = "文件不存在"; return false; } return true; } /** * * @描述:根据文件名读取excel文件 * * @时间:2011-8-9 下午03:17:45 * * @参数:@param fileName * * @参数:@return * * @返回值:List */ public List> read(String fileName) { List
> dataLst = new ArrayList
>(); InputStream is = null; try { /** 验证文件是否合法 */ if (!validateExcel(fileName)) { System.out.println(errorInfo); return null; } /** 判断文件的类型,是2003还是2007 */ boolean isExcel2003 = true; if (WDWUtil.isExcel2007(fileName)) { isExcel2003 = false; } /** 调用本类提供的根据流读取的方法 */ File file = new File(fileName); is = new FileInputStream(file); dataLst = read(is, isExcel2003); is.close(); } catch (Exception ex) { ex.printStackTrace(); } finally { if (is != null) { try { is.close(); } catch (IOException e) { is = null; e.printStackTrace(); } } } /** 返回最后读取的结果 */ return dataLst; } /** * * @描述:根据流读取Excel文件 * * @时间:2011-8-9 下午04:12:41 * * @参数:@param inputStream * * @参数:@param isExcel2003 * * @参数:@return * * @返回值:List */ public List
> read(InputStream inputStream, boolean isExcel2003) { List
> dataLst = null; try { /** 根据版本选择创建Workbook的方式 */ Workbook wb = isExcel2003 ? new HSSFWorkbook(inputStream) : new XSSFWorkbook(inputStream); dataLst = read(wb); } catch (IOException e) { e.printStackTrace(); } return dataLst; } /** * * @描述:读取数据 * * @时间:2011-8-9 下午04:37:25 * * @参数:@param wb * * @参数:@return * * @返回值:List
> */ private List
> read(Workbook wb) { List
> dataLst = new ArrayList
>(); /** 得到第一个shell */ Sheet sheet = wb.getSheetAt(0); /** 得到Excel的行数 */ this.totalRows = sheet.getPhysicalNumberOfRows(); /** 得到Excel的列数 */ if (this.totalRows >= 1 && sheet.getRow(0) != null) { this.totalCells = sheet.getRow(0).getPhysicalNumberOfCells(); } /** 循环Excel的行 */ for (int r = 0; r rowLst = new ArrayList
(); /** 循环Excel的列 */ for (short c = 0; c > list = poi.read("d:/aaa.xls"); List > list = poi.read("d:/aab.xlsx"); if (list != null) { for (int i = 0, ilen = list.size(); i cellList = list.get(i); for (int j = 0, jlen = cellList.size(); j > list = poi.read(path); return list; } } /** * * @描述:工具类 * * @时间:2011-8-9 下午04:28:43 */ class WDWUtil { /** * * @描述:是否是2003的excel,返回true是2003 * * @时间:2011-8-9 下午03:20:49 * * @参数:@param fileName * * @参数:@return * * @返回值:boolean */ public static boolean isExcel2003(String fileName) { return fileName.matches("^.+\\.(?i)(xls)$"); } /** * * @描述:是否是2007的excel,返回true是2007 * * @时间:2011-8-9 下午03:21:37 * * @参数:@param fileName * * @参数:@return * * @返回值:boolean */ public static boolean isExcel2007(String fileName) { return fileName.matches("^.+\\.(?i)(xlsx)$"); } }