入司第一個任務:對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掉異常就就可以。
新手出品,學習之初也有參考其他大神作品,最後總結,按自己需求完成功能,親測可用。