博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java POI读取excel 并保存在数据库中
阅读量:4352 次
发布时间:2019-06-07

本文共 3339 字,大约阅读时间需要 11 分钟。

在网上找了许多资料,都有或多或少的bug,经过几天的努力把基本上POI处理EXCEL上的问题都解决了。

思想:直接通过sql语句把excel读出来的值放入数据库中,所以通过POI读出来的数据全部用","隔开,并且一行做一列。读出来的数字类似:'115781485831','181818','18884ooee7' ,然后通过insert into 直接放入数据库中。

public class ReadExcelUtil {	public Map
readExcel(String filePath, String title) { Map
map = new HashMap
(); // 创建对Excel工作簿文件的引用 try {              //filePath是文件地址。 HSSFWorkbook wookbook = new HSSFWorkbook(new FileInputStream(filePath)); // 在Excel文档中,第一张工作表的缺省索引是0 HSSFSheet sheet = wookbook.getSheetAt(0); // 获取到Excel文件中的所有行数 int rows = sheet.getPhysicalNumberOfRows(); int max_cells = 0; // 获取最长的列,在实践中发现如果列中间有空值的话,那么读到空值的地方就停止了。所以我们需要取得最长的列。               //如果每个列正好都有一个空值得话,通过这种方式获得的列长会比真实的列要少一列。所以我自己会在将要倒入数据库中的EXCEL表加一个表头               //防止列少了,而插入数据库中报错。 for (int i = 0; i < rows; i++) { HSSFRow row = sheet.getRow(i); if (row != null) { int cells = row.getPhysicalNumberOfCells(); if (max_cells < cells) { max_cells = cells; } } } System.out.println(max_cells); // 遍历行 for (int i = 0; i < rows; i++) { // 读取左上端单元格 HSSFRow row = sheet.getRow(i); // 行不为空 if (row != null) { String value = ""; // 遍历列 String b_id = null; for (int j = 0; j < max_cells; j++) { // 获取到列的值 HSSFCell cell = row.getCell(j);                            //把所有是空值的都换成NULL if (cell == null) { value += "NULL,"; } else { switch (cell.getCellType()) {
                                 //如果是公式的话,就读取得出的值 case HSSFCell.CELL_TYPE_FORMULA: try { value += "'" +String.valueOf(cell.getNumericCellValue()).replaceAll("'", "")+ "',"; } catch (IllegalStateException e) { value += "'" +String.valueOf(cell.getRichStringCellValue()).replaceAll("'", "")+ "',"; } break; case HSSFCell.CELL_TYPE_NUMERIC: // 如果有日期的话,那么就读出日期格式 // 如果是数字的话,就写出数字格式 if (HSSFDateUtil.isCellDateFormatted(cell)) { SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date2 = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()); String date1 = dff.format(date2); value += "'" + date1.replaceAll("'", "") + "',"; } else { value += "'" + (int) cell.getNumericCellValue() + "',"; } break; case HSSFCell.CELL_TYPE_STRING: String ss = cell.getStringCellValue().replaceAll("'", "");                                       //如果文本有空值的话,就把它写成null if (ss == null || "".equals(ss)) { value += "NULL,"; } else { value += "'" + cell.getStringCellValue().replaceAll("'", "") + "',"; } break; default: value += "NULL,"; break; } } if (j == 0) { b_id = value.substring(1, value.length() - 2); } } String valueresult = value.substring(0, value.length() - 1); map.put(b_id, valueresult); } } wookbook.close(); } catch (Exception e) { e.printStackTrace(); } map.remove(title);// Iterator
keys = map.keySet().iterator();//// while (keys.hasNext()) {// String key = (String) keys.next();// String value = map.get(key);// System.out.println(key + "==::" + value);// } return map; }}

 

转载于:https://www.cnblogs.com/jerlowliu/p/5091309.html

你可能感兴趣的文章
request.getParameter()获取前台值为null
查看>>
路飞学城Python-Day186
查看>>
django Paginator分页插件
查看>>
关于APP自动化工程的一点小想法
查看>>
vc++post方式登录网站
查看>>
框架标签
查看>>
求职基础复习之冒泡排序c++版
查看>>
【TCP/IP】Ethernet II VS 802.3
查看>>
WebService学习总结(二)——WebService相关概念介绍
查看>>
webpack构建react应用三:使用webpack Loaders 模块加载器(一)
查看>>
00-Java 语言简介
查看>>
Cmake的介绍和使用 Cmake实践【转】
查看>>
Java JDBC
查看>>
为什么占位符可以防止sql注入?
查看>>
用友云开放平台之API网关
查看>>
h5 点击返回键不让它返回上一页
查看>>
博客目录
查看>>
11月2日 小小的记录
查看>>
庆祝我国人民自主研发多叉转二叉成功
查看>>
EasyCodeScanner生成二维码
查看>>