Maven项目结合POI实现导入导入导入导入导入Excl…
2018-08-14 09:55:31来源:博客园 阅读 ()
第一步:写入maven依赖(3.6是比较稳定的版本,可用于生产环境)
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.6</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.6</version> </dependency>
第二步:将Excl导入工具类加进项目中,开箱即用,内置测试main()方法
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 java.io.File; import java.io.FileInputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; /** * * @ClassName: ImportExcelUtil * @Description: excel 导入数据 * @author JonyChen * @date 2018年8月13日 * @time 上午10:28:48 */ public class ImportExcelUtil { private final static String excel2003L =".xls"; //2003- 版本的excel private final static String excel2007U =".xlsx"; //2007+ 版本的excel /** * 描述:获取IO流中的数据,组装成List<List<Object>>对象 * @param file * @return * @throws Exception */ public List<List<Object>> importExcel(File file) throws Exception{ List<List<Object>> list = null; //创建Excel工作薄 Workbook work = this.getWorkbook(file); if(null == work){ throw new Exception("创建Excel工作薄为空!"); } Sheet sheet = null; Row row = null; Cell cell = null; list = new ArrayList<List<Object>>(); //遍历Excel中所有的sheet for (int i = 0; i <work.getNumberOfSheets(); i++) { sheet = work.getSheetAt(i); if(sheet==null){continue;} //遍历当前sheet中的所有行 for (int j = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j++) { row = sheet.getRow(j); if(row==null||row.getFirstCellNum()==j){continue;} //遍历所有的列 List<Object> li = new ArrayList<Object>(); for (int y = row.getFirstCellNum(); y <row.getLastCellNum(); y++) { cell = row.getCell(y); li.add(this.getCellValue(cell)); } list.add(li); } } return list; } /** * 描述:根据文件后缀,自适应上传文件的版本 * @param file * @return * @throws Exception */ public Workbook getWorkbook(File file) throws Exception{ Workbook wb = null; String fileType = file.getName().substring(file.getName().lastIndexOf(".")); if(excel2003L.equals(fileType)){ wb = new HSSFWorkbook(new FileInputStream(file)); //2003- }else if(excel2007U.equals(fileType)){ wb = new XSSFWorkbook(new FileInputStream(file)); //2007+ }else{ throw new Exception("解析的文件格式有误!"); } return wb; } /** * 描述:对表格中数值进行格式化 * @param cell * @return */ public Object getCellValue(Cell cell){ //用String接收所有返回的值 String value = null; DecimalFormat df = new DecimalFormat("0"); //格式化number String字符 SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd"); //日期格式化 DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字 switch (cell.getCellType()) { case Cell.CELL_TYPE_STRING: //String类型的数据 value = cell.getStringCellValue(); break; case Cell.CELL_TYPE_NUMERIC: //数值类型(取值用cell.getNumericCellValue() 或cell.getDateCellValue()) if("General".equals(cell.getCellStyle().getDataFormatString())){ value = df.format(cell.getNumericCellValue()); }else if(HSSFDateUtil.isCellDateFormatted(cell)){ value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())); }else{ value = df2.format(cell.getNumericCellValue()); } break; case Cell.CELL_TYPE_BOOLEAN: //Boolean类型 value = String.valueOf(cell.getBooleanCellValue()); break; case Cell.CELL_TYPE_FORMULA: //表达式类型 value = String.valueOf(cell.getCellFormula()); break; case Cell.CELL_TYPE_ERROR: //异常类型 不知道何时算异常 value=String.valueOf(cell.getErrorCellValue()); break; case Cell.CELL_TYPE_BLANK: //空,不知道何时算空 value = ""; break; default: value = ""; break; } if(value.equals("")||value==null){ value = ""; } if (cell == null) { return ""; } return value; } //读取excel里的字段 public static void main(String[] args){ ImportExcelUtil importExcelUtil=new ImportExcelUtil(); //excel 导入数据demo File file = new File("C:\\Users\\srt\\Desktop\\signup_category.xls"); List<List<Object>> dataList= null; List<SignupCategory> list=new ArrayList<>(); try { dataList = importExcelUtil.importExcel(file); } catch (Exception e) { e.printStackTrace(); } //数据封装格式一,将表格中的数据遍历取出后封装进对象放进List for (int i = 0; i <dataList.size(); i++) { Object type_id = dataList.get(i).get(0); Object type_name = dataList.get(i).get(1); SignupCategory signupCategory=new SignupCategory(); signupCategory.setTypeId(Integer.parseInt((String)type_id)); signupCategory.setTypeName((String)type_name); list.add(signupCategory); System.out.println("------------------"); System.out.println((String)type_id+":"+(String)type_name); } System.out.println(JsonUtils.toJson(list)); //数据封装格式二,双重循环遍历取出元素 /*for (int i = 0; i < dataList.size(); i++) { for (int j = 0; j < dataList.get(i).size(); j++) { System.out.println(dataList.get(i).get(j)); } System.out.println("------------------"); }*/ } }
第三步:在Controller层进行调用即可
补充:
导入基本流程为:前端页面提供excl数据摸板下载地址,用户点击下载模板excl(其实也就是excl的导出),将模板填写完毕后然后再上传至服务器中才调用上面的工具类导入真实数据,上面案例只是将导入的数据取出到控制台进行查看,后期如果有导入数据库的需求,再进行扩展即可,亲测可用,对网上其他教程进行了修正,当前是可用状态!
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 项目经理说这种代码必须重构,我同意了,这代码是写的是有多 2020-06-11
- eclipse下创建Maven项目(包含webapp目录结构) 2020-06-09
- Maven安装与配置 2020-06-09
- 阿里巴巴26个屌炸天的开源项目,你知道几个? 2020-06-09
- IDEA下Maven的pom文件导入依赖出现Auto build completed wit 2020-06-07
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash