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.     } 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(excle)