java POI读取excel 并保存在数据库中

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

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

public class ReadExcelUtil {

	public Map<String, String> readExcel(String filePath, String title) {

		Map<String, String> map = new HashMap<String, String>();

		// 创建对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<String> 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值