poi公式處理

  1. 設置單元格樣式 apache

    HSSFCellStyle類表明一種單元格樣式。能夠經過這個類來設置單元格的邊框樣式背景顏色字體水平垂直對齊方式等等。api

     

    HSSFCellStyle titleStyle = workbook.createCellStyle();
      titleStyle.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);
      titleStyle.setBorderLeft((short)1);
      titleStyle.setBorderRight((short)1);
      titleStyle.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);
      titleStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
      titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

     

    注意:若是咱們定義了一種樣式,把它賦給一些單元格。而後基於新的須要,更改該樣式中的某個屬性,再賦給另外一些單元格。那麼以前單元格樣式的該屬性也會被同時更改。app

    好比咱們定義了樣式,設置單元格背景色爲紅色:ide

     

    HSSFCellStyle cellStyle = workbook.createCellStyle();函數

    cellStyle.setFillForegroundColor(HSSFColor.RED.index);
    cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);字體

     

    而後把它賦給一個單元格:編碼

     

    HSSFCell cell1 = row.createCell((short)1);lua

    cell1.setCellStyle(cellStyle);spa

     

    而後更改樣式中的背景色屬性爲藍色:orm

     

    cellStyle.setFillForegroundColor(HSSFColor.BLUE.index);

     

    而後賦給另外一個單元格:

     

    HSSFCell cell2 = row.createCell((short)2);

    cell2.setCellStyle(cellStyle);

     

    想固然,咱們預計在最終結果中cell1的背景色爲紅色,cell2的背景色爲藍色。可是結果是:兩個單元格的背景色都變成了藍色。

     

    遇到這種狀況,要預先定義兩種不一樣的單元格樣式。

     

    當一個EXCEL文件同時須要不少大同小異的單元格樣式時,這樣一必定義很麻煩。POI HSSF提供了一個HSSFCellUtil類(在org.apache.poi.hssf.usermodel.contrib包),裏面有幾個方法能夠繞過HSSFCellStyle直接設定單元格的樣式,但這幾個方法會拋出NestableException異常,要處理這個異常,須要引用Apache的幾個Common包:

    commons-beanutils.jar

    commons-beanutils-bean-collections.jar

    commons-beanutils-core.jar

    commons-lang.jar

    commons-logging-api.jar

     

    合併單元格

    HSSFSheet.addMergedRegion(new Region())方法能夠合併單元格,Region()中的一個構造函數含有四個參數,分別表明起始行、起始列、結束行、結束列:

    sheet.addMergedRegion(new Region(startRow,startCell,endRow,endCell)));

     

    處理公式

     

    HSSFCell.setCellFormula()方法用來在EXCEL單元格中寫入公式。

       cell = row.createCell((short)(dataFlag));
       cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
       cell.setCellFormula("SUM("A1:D1")");
       cell.setCellStyle(nameStyle);

     

    處理連接

     

    在POI中往單元格中寫連接,是用HYPERLINK函數搞定的。

    HYPERLINK函數包含兩個參數,第一個參數是指向的URL地址,第二個參數是顯示字串。

     

       cell = row.createCell((short)(dataFlag));
       cell.setCellType(HSSFCell.CELL_TYPE_FORMULA);
       cell.setCellFormula("HYPERLINK('連接地址http...')");
       cell.setCellStyle(linkStyle);

     

    爲了使連接效果更好,咱們能夠給連接所在單元格定義一種樣式,使連接顯示爲有下劃線的藍色字串:

     

      HSSFCellStyle linkStyle = workbook.createCellStyle();
      linkStyle.setBorderBottom((short)1);
      linkStyle.setBorderLeft((short)1);
      linkStyle.setBorderRight((short)1);
      linkStyle.setBorderTop((short)1);
      linkStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
      linkStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
      HSSFFont font = workbook.createFont();
      font.setFontName(HSSFFont.FONT_ARIAL);
      font.setUnderline((byte)1);
      font.setColor(HSSFColor.BLUE.index);
      linkStyle.setFont(font);

     

    中文處理:

     

    要在經過POI生成的EXCEL中正常顯示中文,須要爲單元格設置編碼:

     

    cell.setEncoding(HSSFCell.ENCODING_UTF_16);
      cell.setCellValue("部門");

Java使用HSSF讀取Excel表中公式列的方法
    FileInputStream fis = new FileInputStream("c:/temp/test.xls");
    HSSFWorkbook wb = new HSSFWorkbook(fis);
    HSSFSheet sheet = wb.getSheetAt(0);
    HSSFFormulaEvaluator evaluator = new HSSFFormulaEvaluator(sheet, wb);

    // suppose your formula is in B3
    CellReference cellReference = new CellReference("B3");
    HSSFRow row = sheet.getRow(cellReference.getRow());
    HSSFCell cell = row.getCell(cellReference.getCol());
    //設置單元格所在行
    evaluator.setCurrentRow(row); HSSFFormulaEvaluator.CellValue cellValue = evaluator.evaluate(cell); switch (cellValue.getCellType()) { case HSSFCell.CELL_TYPE_BOOLEAN:     System.out.println(cellValue.getBooleanValue());     break; case HSSFCell.CELL_TYPE_NUMERIC:     System.out.println(cellValue.getNumberValue());     break; case HSSFCell.CELL_TYPE_STRING:     System.out.println(cellValue.getStringValue());     break; case HSSFCell.CELL_TYPE_BLANK:     break; case HSSFCell.CELL_TYPE_ERROR:     break; // CELL_TYPE_FORMULA will never happen case HSSFCell.CELL_TYPE_FORMULA:     break; }
相關文章
相關標籤/搜索