| /* ==================================================================== |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| ==================================================================== */ |
| |
| package org.apache.poi.xssf.usermodel; |
| |
| import org.apache.poi.ss.formula.BaseFormulaEvaluator; |
| import org.apache.poi.ss.formula.EvaluationCell; |
| import org.apache.poi.ss.formula.EvaluationWorkbook; |
| import org.apache.poi.ss.formula.WorkbookEvaluator; |
| import org.apache.poi.ss.formula.eval.BoolEval; |
| import org.apache.poi.ss.formula.eval.ErrorEval; |
| import org.apache.poi.ss.formula.eval.NumberEval; |
| import org.apache.poi.ss.formula.eval.StringEval; |
| import org.apache.poi.ss.formula.eval.ValueEval; |
| import org.apache.poi.ss.usermodel.Cell; |
| import org.apache.poi.ss.usermodel.CellType; |
| import org.apache.poi.ss.usermodel.CellValue; |
| import org.apache.poi.ss.usermodel.RichTextString; |
| |
| /** |
| * Internal POI use only - parent of XSSF and SXSSF formula evaluators |
| */ |
| public abstract class BaseXSSFFormulaEvaluator extends BaseFormulaEvaluator { |
| protected BaseXSSFFormulaEvaluator(WorkbookEvaluator bookEvaluator) { |
| super(bookEvaluator); |
| } |
| @Override |
| protected RichTextString createRichTextString(String str) { |
| return new XSSFRichTextString(str); |
| } |
| |
| /** |
| * Turns a XSSFCell / SXSSFCell into a XSSFEvaluationCell |
| */ |
| protected abstract EvaluationCell toEvaluationCell(Cell cell); |
| |
| /** |
| * Returns a CellValue wrapper around the supplied ValueEval instance. |
| */ |
| protected CellValue evaluateFormulaCellValue(Cell cell) { |
| EvaluationCell evalCell = toEvaluationCell(cell); |
| ValueEval eval = _bookEvaluator.evaluate(evalCell); |
| if (eval instanceof NumberEval) { |
| NumberEval ne = (NumberEval) eval; |
| return new CellValue(ne.getNumberValue()); |
| } |
| if (eval instanceof BoolEval) { |
| BoolEval be = (BoolEval) eval; |
| return CellValue.valueOf(be.getBooleanValue()); |
| } |
| if (eval instanceof StringEval) { |
| StringEval ne = (StringEval) eval; |
| return new CellValue(ne.getStringValue()); |
| } |
| if (eval instanceof ErrorEval) { |
| return CellValue.getError(((ErrorEval)eval).getErrorCode()); |
| } |
| throw new RuntimeException("Unexpected eval class (" + eval.getClass().getName() + ")"); |
| } |
| |
| protected void setCellType(Cell cell, CellType cellType) { |
| if (cell instanceof XSSFCell) { |
| EvaluationWorkbook evaluationWorkbook = getEvaluationWorkbook(); |
| BaseXSSFEvaluationWorkbook xewb = BaseXSSFEvaluationWorkbook.class.isAssignableFrom(evaluationWorkbook.getClass()) ? (BaseXSSFEvaluationWorkbook) evaluationWorkbook : null; |
| |
| ((XSSFCell) cell).setCellType(cellType, xewb); |
| } else { |
| // could be an SXSSFCell |
| cell.setCellType(cellType); |
| } |
| } |
| } |