POI 自用API

 poi包下載 APIhtml

使用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有不合法數據,那麼回滾數據。

相關文章
相關標籤/搜索