POI 快速開發

 

1.新建工作簿

  1. Workbook wb = new HSSFWorkbook(); 
  2. FileOutputStream fileOut = new FileOutputStream("workbook.xls"); 
  3. wb.write(fileOut); 
  4. fileOut.close(); 
  5.  
  6. Workbook wb = new XSSFWorkbook(); 
  7. FileOutputStream fileOut = new FileOutputStream("workbook.xlsx"); 
  8. wb.write(fileOut); 
  9. fileOut.close(); 

2.新的工作表

  1. Workbook wb = new HSSFWorkbook();  // or new XSSFWorkbook(); 
  2.    Sheet sheet1 = wb.createSheet("new sheet"); 
  3.    Sheet sheet2 = wb.createSheet("second sheet"); 
  4.  
  5.  
  6.    //注意,表的名稱是Excel不得超過31個字符 
  7.    //並不能包含任何以下字符: 
  8.    //0x0000 
  9.    //0x0003 
  10.    //冒號(:) 
  11.    //反斜槓(\) 
  12.    //星號(*) 
  13.    //問號(?) 
  14.    //正斜線(/) 
  15.    //打開方括號([) 
  16.    //右方括號(]) 
  17.  
  18.    //你可以使用org.apache.poi.ss.util.WorkbookUtil#createSafeSheetName(String nameProposal)} 
  19.    //一個安全的方式,以建立有效的名稱,該實用程序替換無效字符用空格('') 
  20.    String safeName = WorkbookUtil.createSafeSheetName("[O'Brien's sales*?]"); // returns " O'Brien's sales   " 
  21.    Sheet sheet3 = wb.createSheet(safeName); 
  22.  
  23.    FileOutputStream fileOut = new FileOutputStream("workbook.xls"); 
  24.    wb.write(fileOut); 
  25.    fileOut.close(); 

3.創建行、列

  1. Workbook wb = new HSSFWorkbook();  
  2. //Workbook wb = new XSSFWorkbook();  
  3. CreationHelper createHelper = wb.getCreationHelper();  
  4. Sheet sheet = wb.createSheet("new sheet");  
  5.   
  6. // 創建一行,位置爲0  
  7. Row row = sheet.createRow((short)0);  
  8. // 創建一個單元格並賦值  
  9. Cell cell = row.createCell(0);  
  10. cell.setCellValue(1);  
  11.  
  12. row.createCell(1).setCellValue(1.2);  
  13. //設置String的值 
  14. row.createCell(2).setCellValue(  
  15.      createHelper.createRichTextString("This is a String")); 
  16. //設置日期格式 
  17. CellStyle cellStyle = wb.createCellStyle(); 
  18.     cellStyle.setDataFormat( 
  19.         createHelper.createDataFormat().getFormat("m/d/yy h:mm")); 
  20.     cell = row.createCell(3); 
  21.     cell.setCellValue(new Date()); 
  22.     cell.setCellStyle(cellStyle); 
  23. cell = row.createCell(4); 
  24.     cell.setCellValue(Calendar.getInstance()); 
  25.     cell.setCellStyle(cellStyle); 
  26. row.createCell(5).setCellValue(new Date()); 
  27.  
  28. FileOutputStream fileOut = new FileOutputStream("workbook.xls");  
  29. wb.write(fileOut);  
  30. fileOut.close();  

4.插入行、插入合併的行

  1. sheet.shiftRows(starRow + 1, sheet.getLastRowNum(), 1truefalse); 
  2. for (int i = 0; i < sheet.getNumMergedRegions(); i++) { 
  3.     CellRangeAddress range = sheet.getMergedRegion(i); 
  4.     if (range.getFirstRow()==starRow&& starRow==range.getLastRow()) { 
  5.          //插入合併的行
  6. sheet.addMergedRegion(new CellRangeAddress(starRow + 1
  7.                         starRow + 1, range.getFirstColumn(), range 
  8.                         .getLastColumn())); 
  9.     } 

5.內容,對齊方式

  1. createCell(wb, row, (short0, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_BOTTOM); 
  2. createCell(wb, row, (short1, CellStyle.ALIGN_CENTER_SELECTION, CellStyle.VERTICAL_BOTTOM); 
  3. createCell(wb, row, (short2, CellStyle.ALIGN_FILL, CellStyle.VERTICAL_CENTER); 
  4. createCell(wb, row, (short3, CellStyle.ALIGN_GENERAL, CellStyle.VERTICAL_CENTER); 
  5. createCell(wb, row, (short4, CellStyle.ALIGN_JUSTIFY, CellStyle.VERTICAL_JUSTIFY); 
  6. createCell(wb, row, (short5, CellStyle.ALIGN_LEFT, CellStyle.VERTICAL_TOP); 
  7. createCell(wb, row, (short6, CellStyle.ALIGN_RIGHT, CellStyle.VERTICAL_TOP); 

6.複製、插入行

  1. public void insertRow(int starRow) { 
  2.     sheet.shiftRows(starRow + 1, sheet.getLastRowNum(), 1truefalse); 
  3.     for (int i = 0; i < sheet.getNumMergedRegions(); i++) { 
  4.         Region range = sheet.getMergedRegionAt(i); 
  5.         if (range.getRowFrom() == starRow && starRow == range.getRowTo()) { 
  6.             sheet.addMergedRegion(new Region(starRow + 1
  7.                     (short) (starRow + 1), range.getColumnFrom(), range 
  8.                             .getColumnTo())); 
  9.         } 
  10.     } 
  11.     HSSFRow fromRow = sheet.getRow(starRow); 
  12.     HSSFRow newRow = sheet.getRow(starRow + 1); 
  13.     HSSFCell newCell = null
  14.     HSSFCell fromCell = null
  15.     for (int i = 0; i < sheet.getRow(starRow).getPhysicalNumberOfCells(); i++) { 
  16.         fromCell = fromRow.getCell((short) i); 
  17.         if (fromCell == null) { 
  18.             continue
  19.         } 
  20.         newCell = newRow.createCell((short) i); 
  21.         newCell.setCellStyle(fromCell.getCellStyle()); 
  22.         int cType = fromCell.getCellType(); 
  23.         newCell.setCellType(cType); 
  24.     } 

7.複製行(這樣可複製一個表)

  1. /** * 拷貝Excel行 * 從 origSheet的origStartRow行到origEndRow行,複製到newsheet從targetStartNum位置開始 * @param origSheet 原sheet * @param newsheet 目標sheet * @param origStartRow 開始行 * @param origEndRow 結束行 * @param targetStartNum 目標開始行 **/
  2. public void copyRows(HSSFSheet origSheet, HSSFSheet newsheet, 
  3.             int origStartRow, int origEndRow, int targetStartNum) { 
  4.         if ((origStartRow == -1) || (origEndRow == -1
  5.                 || origEndRow < origStartRow) { 
  6.             return
  7.         } 
  8.         // 拷貝合併的單元格 
  9.         Region region = null
  10.         for (int i = 0; i < origSheet.getNumMergedRegions(); i++) { 
  11.             region = origSheet.getMergedRegionAt(i); 
  12.             if ((region.getRowFrom() >= origStartRow) 
  13.                     && (region.getRowTo() <= origEndRow)) { 
  14.                 region.setRowFrom(region.getRowFrom() + targetStartNum); 
  15.                 region.setRowTo(region.getRowTo() + targetStartNum); 
  16.                 newsheet.addMergedRegion(region); 
  17.             } 
  18.         } 
  19.  
  20.         HSSFRow fromRow = null
  21.         HSSFRow newRow = null
  22.         HSSFCell newCell = null
  23.         HSSFCell fromCell = null
  24.  
  25.         // 拷貝行並填充數據 
  26.         for (int i = 0; i <= origEndRow; i++) { 
  27.             fromRow = origSheet.getRow(i); 
  28.             if (fromRow == null) { 
  29.                 continue
  30.             } 
  31.             newRow = newsheet.createRow(i - origStartRow + targetStartNum); 
  32.             newRow.setHeight(fromRow.getHeight()); 
  33.             for (int j = fromRow.getFirstCellNum(); j < fromRow 
  34.                     .getPhysicalNumberOfCells(); j++) { 
  35.                 fromCell = fromRow.getCell((short) j); 
  36.                 if (fromCell == null) { 
  37.                     continue
  38.                 } 
  39.                 newCell = newRow.createCell((short) j); 
  40.                 newCell.setCellStyle(fromCell.getCellStyle()); 
  41.                 int cType = fromCell.getCellType(); 
  42.                 newCell.setCellType(cType); 
  43.                 switch (cType) { 
  44.                 case HSSFCell.CELL_TYPE_STRING: 
  45.                     newCell.setCellValue(fromCell.getStringCellValue()); 
  46.                     break
  47.                 case HSSFCell.CELL_TYPE_NUMERIC: 
  48.                     newCell.setCellValue(fromCell.getNumericCellValue()); 
  49.                     break
  50.                 case HSSFCell.CELL_TYPE_FORMULA: 
  51.                     newCell.setCellFormula(fromCell.getCellFormula()); 
  52.                     break
  53.                 case HSSFCell.CELL_TYPE_BOOLEAN: 
  54.                     newCell.setCellValue(fromCell.getBooleanCellValue()); 
  55.                     break
  56.                 case HSSFCell.CELL_TYPE_ERROR: 
  57.                     newCell.setCellValue(fromCell.getErrorCellValue()); 
  58.                     break
  59.                 default
  60.                     newCell.setCellValue(fromCell.getStringCellValue()); 
  61.                     break
  62.                 } 
  63.             } 
  64.         } 
  65.     } 

 

 

 

 

 

 

 

 

 

 

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