關於POI操作Excel

入司第一個任務:對Excel進行模板的下載,以及讀寫上傳。

1.先導入jar包。poi-3.8.jar(不同版本操作的excel格式不同,xls和xlsx)

HSSFWorkbook,操作xls格式的excel
XSSFWorkbook, 操作xlsx格式的excel

2.首先說excel的下載實現(以xls格式爲例)。

最簡單的方法:
    直接通過鏈接下載,以本地爲例
    --》http://localhost:8080/resources/test/測試excel.xls
    通過這個鏈接點擊就可以下載
侷限:普通的格式:xls,doc是可以下載的,涉及到圖片,文本的就要在頁面
     中設置了,而xlsx,docx目前好像是不能下載的。

這裏寫圖片描述

2下面是代碼的方法
public void down(HttpServletResponse response)  throws              IOException{
        InputStream fileToBeRead = new    FileInputStream("你的excel模板存放路徑,精確到文件名+類型");//io流讀取excel
        String title = "excel命名";
        HSSFWorkbook workbook = new HSSFWorkbook(fileToBeRead);//創建工作薄
        String fileName = java.net.URLEncoder.encode(title, "utf-8");//設置excel編碼格式
        response.reset();// 設置response參數
        response.setContentType("application/vnd.ms-excel;charset=utf-8");
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls");//設置excel格式
        OutputStream out = response.getOutputStream();//io流輸出
        workbook.write(out);//excel成功寫出
    }

3.下載很簡單,上傳就會有一些問題要考慮。(以xls格式爲例)

public void dealExcelWithPath(String filePath) throws ParseException, IOException{
        SimpleDateFormat sd  = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
        InputStream file = new FileInputStream(filePath);//io流讀取上傳的excel,filePath是上傳的路徑
      HSSFWorkbook hssfWorkbook = new HSSFWorkbook(file);//工作薄

        // 循環讀取sheet(頁)(excel中sheet頁數未定)
for (int sheetNo = 0; sheetNo<   hssfWorkbook.getNumberOfSheets();sheetNo++) {
HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(sheetNo);//讀第幾頁
            if (hssfSheet == null) {//若sheet爲空則不讀
                continue;
            }

            // 循環讀取sheet中的row(行),根據實際需求,判斷從第幾行開始讀取數據,我是從第三行開始讀
            for (int rowNo = 2; rowNo <= hssfSheet.getLastRowNum(); rowNo ++) {
                HSSFRow fSSFRow = hssfSheet.getRow(rowNo);
                if(fSSFRow==null){
                    continue;//行爲空的不讀
                }
                //判斷cell(就是單元格,列)爲空則不讀
                if (!(fSSFRow.getCell(0)+"").equals("") && fSSFRow.getCell(0) != null) {
                //獲得cell中的內容進行操作
                }else{
                    continue;//cell爲空則不讀
                }

            }

        }

    }   
//讀取的時候注意填充內容的類型。自定義一個方法返回值
 private String getValue(HSSFCell hssfCell) {
  if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN{
    return String.valueOf(hssfCell.getBooleanCellValue());
  } else if(hssfCell.getCellType()==hssfCell.CELL_TYPE_NUMERIC) { 
            if(HSSFDateUtil.isCellDateFormatted(hssfCell)){
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
                return sdf.format(HSSFDateUtil.getJavaDate(hssfCell.getNumericCellValue())).toString();
            }
return String.valueOf(hssfCell.getNumericCellValue());
        } else {
            return String.valueOf(hssfCell.getStringCellValue());
        }
    }
5.一般四種類型,重點是時間類型,若出現時間,格式化的格式一定要和excel中的格式一樣,不然讀取異常。如果數據中出現特殊字符,比如“,”等,在讀取的時候提前判斷就可以了。在實際應用中,上傳者上傳格式可能出錯,或者和要求的不同,注意try catch掉異常就就可以。

新手出品,學習之初也有參考其他大神作品,最後總結,按自己需求完成功能,親測可用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章