src/org/tiefaces/components/websheet/configuration/FormCommand.java
private void buildWatchListForCell(
			final XSSFEvaluationWorkbook wbWrapper, final int sheetIndex,
			final Cell cell, final List<Integer> watchList, final int lastStaticRow) {
		String formula = cell.getCellFormula();

		Ptg[] ptgs = FormulaParser.parse(formula, wbWrapper,
				FormulaType.CELL, sheetIndex);

		for (int k = 0; k < ptgs.length; k++) {
			Object ptg = ptgs[k];
			// For area formula, only first row is watched.
			// Reason is the lastRow must shift same rows with
			// firstRow.
			// Otherwise it's difficult to calculate.
			// In case some situation cannot fit, then should make
			// change to the formula.
			int areaInt = ShiftFormulaUtility
					.getFirstSupportedRowNumFromPtg(ptg);
			if (areaInt >= 0) {
				addToWatchList(areaInt, lastStaticRow, watchList);
			}
		}

		// when insert row, the formula may changed. so here is the
		// workaround.
		// change formula to user formula to preserve the row
		// changes.
		cell.setCellType(CellType.STRING);
		cell.setCellValue(TieConstants.USER_FORMULA_PREFIX + formula
				+ TieConstants.USER_FORMULA_SUFFIX);
	}
private void buildWatchListForCell(
			final XSSFEvaluationWorkbook wbWrapper, final int sheetIndex,
			final Cell cell, final List<Integer> watchList, final int lastStaticRow) {
		String formula = cell.getCellFormula();

		Ptg[] ptgs = FormulaParser.parse(formula, wbWrapper,
				FormulaType.CELL, sheetIndex);

		for (int k = 0; k < ptgs.length; k++) {
			Object ptg = ptgs[k];
			// For area formula, only first row is watched.
			// Reason is the lastRow must shift same rows with
			// firstRow.
			// Otherwise it's difficult to calculate.
			// In case some situation cannot fit, then should make
			// change to the formula.
			int areaInt = ShiftFormulaUtility
					.getFirstSupportedRowNumFromPtg(ptg);
			if (areaInt >= 0) {
				addToWatchList(areaInt, lastStaticRow, watchList);
			}
		}

		// when insert row, the formula may changed. so here is the
		// workaround.
		// change formula to user formula to preserve the row
		// changes.
		cell.setCellType(CellType.STRING);
		cell.setCellValue(TieConstants.USER_FORMULA_PREFIX + formula
				+ TieConstants.USER_FORMULA_SUFFIX);
	}
private void buildWatchListForCell ( final XSSFEvaluationWorkbook wbWrapper , final int sheetIndex , final Cell cell , final List < Integer > watchList , final int lastStaticRow ) { String formula = cell . getCellFormula ( ) ; Ptg [ ] ptgs = FormulaParser . parse ( formula , wbWrapper , FormulaType . CELL , sheetIndex ) ; for ( int k = 0 ; k < ptgs . length ; k ++ ) { Object ptg = ptgs [ k ] ; // For area formula, only first row is watched.
 // Reason is the lastRow must shift same rows with
 // firstRow.
 // Otherwise it's difficult to calculate.
 // In case some situation cannot fit, then should make
 // change to the formula.
 int areaInt = ShiftFormulaUtility . getFirstSupportedRowNumFromPtg ( ptg ) ; if ( areaInt >= 0 ) { addToWatchList ( areaInt , lastStaticRow , watchList ) ; } } // when insert row, the formula may changed. so here is the
 // workaround.
 // change formula to user formula to preserve the row
 // changes.
 cell . setCellType ( CellType . STRING ) ; cell . setCellValue ( TieConstants . USER_FORMULA_PREFIX + formula + TieConstants . USER_FORMULA_SUFFIX ) ; }
Builds the watch list for cell.

@param wbWrapper
the wb wrapper
@param sheetIndex
the sheet index
@param cell
the cell
@param watchList
the watch list
@param lastStaticRow
the last static row
Builds the watch list for cell .