Excel导入工具类
项目需要从Excel导入数据,然后插入到数据库对应表中。设计了一个导入工具类,导入数据和导入结果如下图示:
poi jar版本采用的3.15
导入工具类实现如下:
package com.alphajuns.ssm.utils; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.junit.Test; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.text.DateFormat; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 导入工具类 */ public class ExcelPoiImportUtils { /** * 导入测试 * @param args */ public static void main(String[] args) { File file = new File("F:\\样机试制新的导入模板1.xlsx"); List<List<String>> excelListList = importFromExcel(file); for (int i = 0; i < excelListList.size(); i++) { System.out.println(excelListList.get(i)); } } /** * 导入 * @param file * @return */ public static List<List<String>> importFromExcel(File file) { // 用于保存读取的Excel信息 List<List<String>> excelListList = new ArrayList<List<String>>(); // 创建工作簿 Workbook workBook = null; // 获取文件名 String fileName = file.getName(); // 判断Excel类型,是Excel2003还是Excel2007,通过文件名后缀判断 try { if (fileName.endsWith("xls")) { workBook = new HSSFWorkbook(new FileInputStream(file)); } else if (fileName.endsWith("xlsx")) { workBook = new XSSFWorkbook(new FileInputStream(file)); } } catch (IOException e) { e.printStackTrace(); } // 获得第一个sheet Sheet sheet = workBook.getSheetAt(0); // 获得该sheet的所有行 int rows = sheet.getPhysicalNumberOfRows(); for (int i = 0; i < rows; i++) { // 获取一行 Row row = sheet.getRow(i); // 第一行为标题行,跳过 if (i == 0) { continue; } // 获得列数 int cellNums = row.getLastCellNum(); // 用于保存每行数据 List<String> excelList = new ArrayList<String>(); // 一次保存列信息 for (int j = 0; j < cellNums; j++) { Cell cell = row.getCell(j); String cellValue = getCellValue(cell).trim(); excelList.add(cellValue); } excelListList.add(excelList); } return excelListList; } /** * 获取单元格的值 * @param cell * @return */ public static String getCellValue(Cell cell) { String cellValue = null; if (cell == null) { cellValue = ""; } // 获取单元格类型 int cellType = cell.getCellType(); DecimalFormat decimalFormat = new DecimalFormat("0"); switch (cellType) { case Cell.CELL_TYPE_BLANK: cellValue = ""; break; case Cell.CELL_TYPE_NUMERIC: // 判断是否为日期 if (DateUtil.isCellDateFormatted(cell)) { DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); cellValue = dateFormat.format(cell.getDateCellValue()); } else { String number = String.valueOf(cell.getNumericCellValue()); // 是否是浮点数 if (number.indexOf(".") != -1) { decimalFormat = new DecimalFormat("#.###"); } cellValue = decimalFormat.format(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_STRING: cellValue = String.valueOf(cell.getStringCellValue()); break; case Cell.CELL_TYPE_FORMULA: // 公式需要获取其数值 cell.setCellType(CellType.NUMERIC); cellValue = decimalFormat.format(cell.getNumericCellValue()); break; case Cell.CELL_TYPE_BOOLEAN: cellValue = String.valueOf(cell.getBooleanCellValue()); case Cell.CELL_TYPE_ERROR: cellValue = String.valueOf(cell.getErrorCellValue()); break; default: cellValue = cell.getStringCellValue(); break; } return cellValue; } }
分类:
工具封装
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现