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; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM