使用POI生成Excel,你們都是贊個。但是狐狸以爲畢竟不是微軟的產品,使用沒有C#語言的好用,方法仍是存在極限的。java
下面總結狐狸本身用過的方法:數據庫
import org.apache.poi.hssf.usermodel.*;apache
@ 建立一個空白的excelapp
HSSFWorkbook workBook = new HSSFWorkbook();//是操做Excel2003的版本,擴展名是xls
@ 建立sheet頁jsp
HSSFSheet sheet = workBook.createSheet(String sheetName);//參數是設置sheet的名字 HSSFSheet sheet = workBook.createSheet();//sheet名字爲默認sheet0
@ sheet的其它經常使用設計ide
在poi中並不存在某個單元格或者區域設置可編輯與不可編輯的方法,若是要控制某些列或者行是能夠編輯的功能,必須先函數
把sheet設置爲密碼保護模式,而後對指定的可編輯單元格設置保護失效。字體
sheet.createFreezePane(int colSplit, int rowSplit);//凍結
sheet.createFreezePane(int colSplit, int rowSplit, intleftmostColumn,int topRow);
以上兩種凍結方法只是區域參數不一樣。ui
sheet.protectSheet("hisense");//密碼保護,保護區域不能夠修改 HSSFCellStyle styleEdit = workBook.createCellStyle();//設置單元格格式 styleEdit.setLocked(false);//該樣式的保護失效
@ sheet中建立行
HSSFRow row = sheet.createRow(int i);//生成第一行,i默認從0開始 row.setHeight((short)900);//設置行高
@ row中設置單元格
HSSFCell cell = row.createCell(int i);//在row行的第i+1列生成一個單元格 cell.setCellValue(new HSSFRichTextString(String text));//單元格賦值 cell.setZeroHeight(true);//將行高設置爲零便可以隱藏 cell.setCellStyle(HSSFCellStyle style);//在單元格設置樣式,樣式在下面詳解
若該style = styleEdit(上面sheet部分已經設置,見@ sheet的其它經常使用設計),則表示該單元格能夠編輯
@ 單元格格式設置
HSSFCellStyle style = workBook.createCellStyle();//建立單元格樣式 HSSFFont font = workBook.createFont();//設置字體 font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗體顯示 style.setFont(font);//選擇須要用到的字體格式
HSSFDataFormat format = workBook.createDataFormat();//設置單元格格式
style.setDataFormat(format.getFormat("@"));//設置單元格爲文本格式
style.setBorderRight(HSSFCellStyle.BORDER_THIN);//生成右邊框 style.setRightBorderColor(HSSFColor.BLACK.index);//設置右邊框顏色 style.setFillForegroundColor(IndexedColors.LIGHT_CORNFLOWER_BLUE.getIndex());//設置單元格背景
style.setAlignment(HSSFCellStyle.ALIGN_RIGHT);//設置單元格右對齊
邊框的方法有:setBorderLeft,setBorderRight,setBorderTop,setBorderBottom
@ 合併單元格
import org.apache.poi.hssf.util.Region; sheet.addMergedRegion(new Region(startRow, (short) startColumn, endRow, (short) endColumn));
================================================================================
讀取excel數據的方法:
@ 讀取excel文件
HSSFWorkbook workbook = new HSSFWorkbook(new java.io.FileInputStream( String filePath));
@ 根據sheet名讀取sheet內頁
HSSFSheet sheet = workbook.getSheet(String sheetName);
@ 讀取指定rowIndex的行
HSSFRow row = sheet.getRow(int rowIndex);
@ 讀取單元格
HSSFCell cell = row.getCell(int index);
@ 讀取單元格內的值
String value = row.getCell(int index).getStringCellValue();
單元格內爲空時,用上面方法會報錯,解決方法:
HSSFCell Cell = row.getCell(int index); cell.setCellType(HSSFCell.CELL_TYPE_STRING);//設置爲string類型 String value = row.getCell(index).getStringCellValue();
@ 用於輔助的好用方法:
int lastCol = row.getLastCellNum();//獲取最後一列 int lastRow = sheet.getLastRowNum();//獲取最後一行
@ 設置單元格值類型
cell.setCellValue(String);//設置單元格文本值 cell.setCellValue(Double);//設置單元格數字型值
經過以上的函數,能夠完成excel的建立和讀取操做。
*************************************************************************************************
狐狸最近在完成JSP動態表格導出excel形式而且設置excel受保護部分單元格能夠編輯的屬性,最後實現批量修改導入到數據的過程。
@ 將JSP頁面表格導出excel形式:
實現:利用poi設置excel格式,而且從數據庫中讀取數據導入到excel中,最後設置response以下:
response.setContentType("application/vnd.ms-excel;charset=gbk"); response.setHeader("Content-Disposition", "attachment;filename=policyParam.xls"); OutputStream out = response.getOutputStream(); workBook.write(out); out.close();
若導出的excel文件是中文,請先轉碼再導出。
String fileName =java.net.URLEncoder.encode("導出","utf-8"); response.setContentType("application/vnd.ms-excel;charset=utf-8"); response.setHeader("Content-Disposition", "attachment;filename="+fileName+".xls"); OutputStream out = response.getOutputStream(); workBook.write(out); out.close();
項目經理說頁面的數據不是能夠直接導成excel嗎?我以爲與其從JSP讀出數據,不如直接從數據庫讀取數據。
@ 將excel的數據批量導入到數據庫
第一步設計一個文件上傳表單,同時校驗excel合法性(模板是否符合當前的對象)
第二步利用 com.jspsmart.upload.SmartUpload讀取文件流,從文件流中讀取excel數據。
第三步將讀到的數據利用JDBC更新到數據庫,每1000條commit一次。
第四步若是excel有不合法數據,那麼回滾數據。