return _iBook.getExternalName(externSheetIndex, externNameIndex);
}
+ public ExternalName getExternalName(String nameName, String sheetName, int externalWorkbookNumber) {
+ throw new IllegalStateException("XSSF-style external names are not supported for HSSF");
+ }
+
public String resolveNameXText(NameXPtg n) {
return _iBook.resolveNameXText(n.getSheetRefIndex(), n.getNameIndex());
}
// Update any formulas on this sheet that point to
// rows which have been moved
int sheetIndex = _workbook.getSheetIndex(this);
+ String sheetName = _workbook.getSheetName(sheetIndex);
short externSheetIndex = _book.checkExternSheet(sheetIndex);
- FormulaShifter shifter = FormulaShifter.createForRowShift(externSheetIndex, startRow, endRow, n);
+ FormulaShifter shifter = FormulaShifter.createForRowShift(
+ externSheetIndex, sheetName, startRow, endRow, n);
_sheet.updateFormulasAfterCellShift(shifter, externSheetIndex);
int nSheets = _workbook.getNumberOfSheets();
*/
int convertFromExternSheetIndex(int externSheetIndex);
+ /**
+ * HSSF Only - fetch the external-style name details
+ */
ExternalName getExternalName(int externSheetIndex, int externNameIndex);
+ /**
+ * XSSF Only - fetch the external-style name details
+ */
+ ExternalName getExternalName(String nameName, String sheetName, int externalWorkbookNumber);
+
EvaluationName getName(NamePtg namePtg);
EvaluationName getName(String name, int sheetIndex);
String resolveNameXText(NameXPtg ptg);
package org.apache.poi.ss.formula;
-import org.apache.poi.ss.formula.ptg.*;
+import org.apache.poi.ss.formula.ptg.Area2DPtgBase;
+import org.apache.poi.ss.formula.ptg.Area3DPtg;
+import org.apache.poi.ss.formula.ptg.Area3DPxg;
+import org.apache.poi.ss.formula.ptg.AreaErrPtg;
+import org.apache.poi.ss.formula.ptg.AreaPtg;
+import org.apache.poi.ss.formula.ptg.AreaPtgBase;
+import org.apache.poi.ss.formula.ptg.Deleted3DPxg;
+import org.apache.poi.ss.formula.ptg.DeletedArea3DPtg;
+import org.apache.poi.ss.formula.ptg.DeletedRef3DPtg;
+import org.apache.poi.ss.formula.ptg.Ptg;
+import org.apache.poi.ss.formula.ptg.Ref3DPtg;
+import org.apache.poi.ss.formula.ptg.Ref3DPxg;
+import org.apache.poi.ss.formula.ptg.RefErrorPtg;
+import org.apache.poi.ss.formula.ptg.RefPtg;
+import org.apache.poi.ss.formula.ptg.RefPtgBase;
/**
- * @author Josh Micich
+ * Updates Formulas as rows or sheets are shifted
*/
public final class FormulaShifter {
}
/**
- * Extern sheet index of sheet where moving is occurring
+ * Extern sheet index of sheet where moving is occurring,
+ * used for updating HSSF style 3D references
*/
private final int _externSheetIndex;
+ /**
+ * Sheet name of the sheet where moving is occurring,
+ * used for updating XSSF style 3D references on row shifts.
+ */
+ private final String _sheetName;
+
private final int _firstMovedIndex;
private final int _lastMovedIndex;
private final int _amountToMove;
*
* For example, this will be called on {@link org.apache.poi.hssf.usermodel.HSSFSheet#shiftRows(int, int, int)} }
*/
- private FormulaShifter(int externSheetIndex, int firstMovedIndex, int lastMovedIndex, int amountToMove) {
+ private FormulaShifter(int externSheetIndex, String sheetName, int firstMovedIndex, int lastMovedIndex, int amountToMove) {
if (amountToMove == 0) {
throw new IllegalArgumentException("amountToMove must not be zero");
}
throw new IllegalArgumentException("firstMovedIndex, lastMovedIndex out of order");
}
_externSheetIndex = externSheetIndex;
+ _sheetName = sheetName;
_firstMovedIndex = firstMovedIndex;
_lastMovedIndex = lastMovedIndex;
_amountToMove = amountToMove;
*/
private FormulaShifter(int srcSheetIndex, int dstSheetIndex) {
_externSheetIndex = _firstMovedIndex = _lastMovedIndex = _amountToMove = -1;
+ _sheetName = null;
_srcSheetIndex = srcSheetIndex;
_dstSheetIndex = dstSheetIndex;
_mode = ShiftMode.Sheet;
}
- public static FormulaShifter createForRowShift(int externSheetIndex, int firstMovedRowIndex, int lastMovedRowIndex, int numberOfRowsToMove) {
- return new FormulaShifter(externSheetIndex, firstMovedRowIndex, lastMovedRowIndex, numberOfRowsToMove);
+ public static FormulaShifter createForRowShift(int externSheetIndex, String sheetName, int firstMovedRowIndex, int lastMovedRowIndex, int numberOfRowsToMove) {
+ return new FormulaShifter(externSheetIndex, sheetName, firstMovedRowIndex, lastMovedRowIndex, numberOfRowsToMove);
}
public static FormulaShifter createForSheetShift(int srcSheetIndex, int dstSheetIndex) {
}
return rowMoveRefPtg(rptg);
}
+ if(ptg instanceof Ref3DPxg) {
+ Ref3DPxg rpxg = (Ref3DPxg)ptg;
+ if (rpxg.getExternalWorkbookNumber() > 0 ||
+ ! _sheetName.equals(rpxg.getSheetName())) {
+ // only move 3D refs that refer to the sheet with cells being moved
+ }
+ return rowMoveRefPtg(rpxg);
+ }
if(ptg instanceof Area2DPtgBase) {
if (currentExternSheetIx != _externSheetIndex) {
// local refs on other sheets are unaffected
}
return rowMoveAreaPtg(aptg);
}
+ if(ptg instanceof Area3DPxg) {
+ Area3DPxg apxg = (Area3DPxg)ptg;
+ if (apxg.getExternalWorkbookNumber() > 0 ||
+ ! _sheetName.equals(apxg.getSheetName())) {
+ // only move 3D refs that refer to the sheet with cells being moved
+ return null;
+ }
+ return rowMoveAreaPtg(apxg);
+ }
return null;
}
Area3DPtg area3DPtg = (Area3DPtg) ptg;
return new DeletedArea3DPtg(area3DPtg.getExternSheetIndex());
}
+ if (ptg instanceof Ref3DPxg) {
+ Ref3DPxg pxg = (Ref3DPxg)ptg;
+ return new Deleted3DPxg(pxg.getExternalWorkbookNumber(), pxg.getSheetName());
+ }
+ if (ptg instanceof Area3DPxg) {
+ Area3DPxg pxg = (Area3DPxg)ptg;
+ return new Deleted3DPxg(pxg.getExternalWorkbookNumber(), pxg.getSheetName());
+ }
throw new IllegalArgumentException("Unexpected ref ptg class (" + ptg.getClass().getName() + ")");
}
import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalSheet;
import org.apache.poi.ss.formula.eval.AreaEval;
import org.apache.poi.ss.formula.eval.ErrorEval;
-import org.apache.poi.ss.formula.eval.NameXEval;
+import org.apache.poi.ss.formula.eval.ExternalNameEval;
+import org.apache.poi.ss.formula.eval.FunctionNameEval;
import org.apache.poi.ss.formula.eval.RefEval;
import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.formula.functions.FreeRefFunction;
}
public ValueEval getNameXEval(NameXPtg nameXPtg) {
+ // Is the name actually on our workbook?
ExternalSheet externSheet = _workbook.getExternalSheet(nameXPtg.getSheetRefIndex());
if(externSheet == null || externSheet.getWorkbookName() == null) {
// External reference to our own workbook's name
- return new NameXEval(nameXPtg);
+ return getLocalNameXEval(nameXPtg);
}
+ // Look it up for the external workbook
String workbookName = externSheet.getWorkbookName();
ExternalName externName = _workbook.getExternalName(
nameXPtg.getSheetRefIndex(),
nameXPtg.getNameIndex()
);
- return getNameXEval(externName, workbookName);
+ return getExternalNameXEval(externName, workbookName);
}
public ValueEval getNameXEval(NameXPxg nameXPxg) {
ExternalSheet externSheet = _workbook.getExternalSheet(nameXPxg.getSheetName(), nameXPxg.getExternalWorkbookNumber());
if(externSheet == null || externSheet.getWorkbookName() == null) {
// External reference to our own workbook's name
- // TODO How to do this?
- return new NameXEval(null);
+ return getLocalNameXEval(nameXPxg);
}
- // TODO
- return null;
-// return getNameXEval(nameXPxg.getNameName(), externSheet.getWorkbookName());
+ // Look it up for the external workbook
+ String workbookName = externSheet.getWorkbookName();
+ ExternalName externName = _workbook.getExternalName(
+ nameXPxg.getNameName(),
+ nameXPxg.getSheetName(),
+ nameXPxg.getExternalWorkbookNumber()
+ );
+ return getExternalNameXEval(externName, workbookName);
+ }
+
+ private ValueEval getLocalNameXEval(NameXPxg nameXPxg) {
+ // Look up the sheet, if present
+ int sIdx = -1;
+ if (nameXPxg.getSheetName() != null) {
+ sIdx = _workbook.getSheetIndex(nameXPxg.getSheetName());
+ }
+
+ // Is it a name or a function?
+ String name = nameXPxg.getNameName();
+ EvaluationName evalName = _workbook.getName(name, sIdx);
+ if (evalName != null) {
+ // Process it as a name
+ return new ExternalNameEval(evalName);
+ } else {
+ // Must be an external function
+ return new FunctionNameEval(name);
+ }
+ }
+ private ValueEval getLocalNameXEval(NameXPtg nameXPtg) {
+ String name = _workbook.resolveNameXText(nameXPtg);
+
+ // Try to parse it as a name
+ int sheetNameAt = name.indexOf('!');
+ EvaluationName evalName = null;
+ if (sheetNameAt > -1) {
+ // Sheet based name
+ String sheetName = name.substring(0, sheetNameAt);
+ String nameName = name.substring(sheetNameAt+1);
+ evalName = _workbook.getName(nameName, _workbook.getSheetIndex(sheetName));
+ } else {
+ // Workbook based name
+ evalName = _workbook.getName(name, -1);
+ }
+
+ if (evalName != null) {
+ // Process it as a name
+ return new ExternalNameEval(evalName);
+ } else {
+ // Must be an external function
+ return new FunctionNameEval(name);
+ }
}
- private ValueEval getNameXEval(ExternalName externName, String workbookName) {
+
+ private ValueEval getExternalNameXEval(ExternalName externName, String workbookName) {
try {
WorkbookEvaluator refWorkbookEvaluator = _bookEvaluator.getOtherWorkbookEvaluator(workbookName);
EvaluationName evaluationName = refWorkbookEvaluator.getName(externName.getName(),externName.getIx()-1);
package org.apache.poi.ss.formula;
-import org.apache.poi.ss.formula.eval.NameEval;
+import org.apache.poi.ss.formula.eval.FunctionNameEval;
import org.apache.poi.ss.formula.eval.NotImplementedFunctionException;
import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.formula.functions.FreeRefFunction;
ValueEval nameArg = args[0];
String functionName;
- if (nameArg instanceof NameEval) {
- functionName = ((NameEval) nameArg).getFunctionName();
+ if (nameArg instanceof FunctionNameEval) {
+ functionName = ((FunctionNameEval) nameArg).getFunctionName();
} else {
throw new RuntimeException("First argument should be a NameEval, but got ("
+ nameArg.getClass().getName() + ")");
import org.apache.poi.ss.formula.eval.BoolEval;
import org.apache.poi.ss.formula.eval.ErrorEval;
import org.apache.poi.ss.formula.eval.EvaluationException;
+import org.apache.poi.ss.formula.eval.ExternalNameEval;
import org.apache.poi.ss.formula.eval.FunctionEval;
+import org.apache.poi.ss.formula.eval.FunctionNameEval;
import org.apache.poi.ss.formula.eval.MissingArgEval;
-import org.apache.poi.ss.formula.eval.NameEval;
-import org.apache.poi.ss.formula.eval.NameXEval;
import org.apache.poi.ss.formula.eval.NotImplementedException;
import org.apache.poi.ss.formula.eval.NumberEval;
import org.apache.poi.ss.formula.eval.OperandResolver;
EvaluationName nameRecord = _workbook.getName(namePtg);
return getEvalForNameRecord(nameRecord, ec);
}
- if (ptg instanceof NameXPtg) { // TODO Generalise for NameXPxg
+ if (ptg instanceof NameXPtg) {
// Externally defined named ranges or macro functions
- NameXPtg nameXPtg = (NameXPtg)ptg;
- ValueEval eval = ec.getNameXEval(nameXPtg);
-
- if (eval instanceof NameXEval) {
- // Could not be directly evaluated, so process as a name
- return getEvalForNameX(nameXPtg, ec);
- } else {
- // Use the evaluated version
- return eval;
- }
+ return processNameEval(ec.getNameXEval((NameXPtg)ptg), ec);
}
if (ptg instanceof NameXPxg) {
- // TODO This is a temporary hack....
- NameXPxg pxg = (NameXPxg)ptg;
- int sIdx = -1;
- if (pxg.getSheetName() != null) {
- sIdx = _workbook.getSheetIndex(pxg.getSheetName());
- }
- EvaluationName evalName = _workbook.getName(pxg.getNameName(), sIdx);
- if (evalName == null) {
- // We don't know about that name, sorry
- // TODO What about UDFs?
- logInfo("Unknown Name referenced: " + pxg.getNameName());
- return ErrorEval.NAME_INVALID;
- }
-
- int nIdx = evalName.createPtg().getIndex();
- NameXPtg nptg = new NameXPtg(sIdx, nIdx);
- return getEvalForPtg(nptg, ec);
+ // Externally defined named ranges or macro functions
+ return processNameEval(ec.getNameXEval((NameXPxg)ptg), ec);
}
if (ptg instanceof IntPtg) {
throw new RuntimeException("Unexpected ptg class (" + ptg.getClass().getName() + ")");
}
+
+ private ValueEval processNameEval(ValueEval eval, OperationEvaluationContext ec) {
+ if (eval instanceof ExternalNameEval) {
+ EvaluationName name = ((ExternalNameEval)eval).getName();
+ return getEvalForNameRecord(name, ec);
+ }
+ return eval;
+ }
private ValueEval getEvalForNameRecord(EvaluationName nameRecord, OperationEvaluationContext ec) {
if (nameRecord.isFunctionName()) {
- return new NameEval(nameRecord.getNameText());
+ return new FunctionNameEval(nameRecord.getNameText());
}
if (nameRecord.hasFormula()) {
return evaluateNameFormula(nameRecord.getNameDefinition(), ec);
throw new RuntimeException("Don't now how to evalate name '" + nameRecord.getNameText() + "'");
}
- private ValueEval getEvalForNameX(NameXPtg nameXPtg, OperationEvaluationContext ec) {
- String name = _workbook.resolveNameXText(nameXPtg);
-
- // Try to parse it as a name
- int sheetNameAt = name.indexOf('!');
- EvaluationName nameRecord = null;
- if (sheetNameAt > -1) {
- // Sheet based name
- String sheetName = name.substring(0, sheetNameAt);
- String nameName = name.substring(sheetNameAt+1);
- nameRecord = _workbook.getName(nameName, _workbook.getSheetIndex(sheetName));
- } else {
- // Workbook based name
- nameRecord = _workbook.getName(name, -1);
- }
-
- if (nameRecord != null) {
- // Process it as a name
- return getEvalForNameRecord(nameRecord, ec);
- } else {
- // Must be an external function
- return new NameEval(name);
- }
- }
/**
* YK: Used by OperationEvaluationContext to resolve indirect names.
public ExternalName getExternalName(int externSheetIndex, int externNameIndex) {
return _masterBook.getExternalName(externSheetIndex, externNameIndex);
}
+ public ExternalName getExternalName(String nameName, String sheetName, int externalWorkbookNumber) {
+ return _masterBook.getExternalName(nameName, sheetName, externalWorkbookNumber);
+ }
- public int getSheetIndex(EvaluationSheet sheet) {
+ public int getSheetIndex(EvaluationSheet sheet) {
if (sheet instanceof ForkedEvaluationSheet) {
ForkedEvaluationSheet mes = (ForkedEvaluationSheet) sheet;
return mes.getSheetIndex(_masterBook);
--- /dev/null
+/* ====================================================================
+ 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.ss.formula.ptg;
+
+import org.apache.poi.ss.usermodel.ErrorConstants;
+import org.apache.poi.util.LittleEndianOutput;
+
+
+/**
+ * An XSSF only representation of a reference to a deleted area
+ */
+public final class Deleted3DPxg extends OperandPtg {
+ private int externalWorkbookNumber = -1;
+ private String sheetName;
+
+ public Deleted3DPxg(int externalWorkbookNumber, String sheetName) {
+ this.externalWorkbookNumber = externalWorkbookNumber;
+ this.sheetName = sheetName;
+ }
+ public Deleted3DPxg(String sheetName) {
+ this(-1, sheetName);
+ }
+
+ public String toString() {
+ StringBuffer sb = new StringBuffer();
+ sb.append(getClass().getName());
+ sb.append(" [");
+ if (externalWorkbookNumber >= 0) {
+ sb.append(" [");
+ sb.append("workbook=").append(getExternalWorkbookNumber());
+ sb.append("] ");
+ }
+ sb.append("sheet=").append(getSheetName());
+ sb.append(" ! ");
+ sb.append(ErrorConstants.getText(ErrorConstants.ERROR_REF));
+ sb.append("]");
+ return sb.toString();
+ }
+
+ public int getExternalWorkbookNumber() {
+ return externalWorkbookNumber;
+ }
+ public String getSheetName() {
+ return sheetName;
+ }
+
+ public String toFormulaString() {
+ StringBuffer sb = new StringBuffer();
+ if (externalWorkbookNumber >= 0) {
+ sb.append('[');
+ sb.append(externalWorkbookNumber);
+ sb.append(']');
+ }
+ if (sheetName != null) {
+ sb.append(sheetName);
+ }
+ sb.append('!');
+ sb.append(ErrorConstants.getText(ErrorConstants.ERROR_REF));
+ return sb.toString();
+ }
+
+ public byte getDefaultOperandClass() {
+ return Ptg.CLASS_VALUE;
+ }
+
+ public int getSize() {
+ return 1;
+ }
+ public void write(LittleEndianOutput out) {
+ throw new IllegalStateException("XSSF-only Ptg, should not be serialised");
+ }
+}
}
public ExternalName getExternalName(int externSheetIndex, int externNameIndex) {
- throw new RuntimeException("Not implemented yet");
+ throw new IllegalStateException("HSSF-style external references are not supported for XSSF");
}
- public NameXPxg getNameXPtg(String name, SheetIdentifier sheet) {
+ public ExternalName getExternalName(String nameName, String sheetName, int externalWorkbookNumber) {
+ if (externalWorkbookNumber > 0) {
+ // External reference - reference is 1 based, link table is 0 based
+ int linkNumber = externalWorkbookNumber - 1;
+ ExternalLinksTable linkTable = _uBook.getExternalLinksTable().get(linkNumber);
+ return new ExternalName(nameName, -1, -1); // TODO Finish this
+ } else {
+ // Internal reference
+ int nameIdx = _uBook.getNameIndex(nameName);
+ return new ExternalName(nameName, nameIdx, -1); // TODO Is this right?
+ }
+
+ }
+
+ public NameXPxg getNameXPtg(String name, SheetIdentifier sheet) {
// First, try to find it as a User Defined Function
IndexedUDFFinder udfFinder = (IndexedUDFFinder)getUDFFinder();
FreeRefFunction func = udfFinder.findFunction(name);
}
// Otherwise, try it as a named range
+ if (sheet == null) {
+ if (_uBook.getNameIndex(name) > -1) {
+ return new NameXPxg(null, name);
+ }
+ return null;
+ }
if (sheet._sheetIdentifier == null) {
// Workbook + Named Range only
int bookIndex = resolveBookIndex(sheet._bookName);
XSSFEvaluationWorkbook frBook = XSSFEvaluationWorkbook.create(_uBook);
return FormulaParser.parse(cell.getCellFormula(), frBook, FormulaType.CELL, _uBook.getSheetIndex(cell.getSheet()));
}
-
+
public UDFFinder getUDFFinder(){
return _uBook.getUDFFinder();
}
import org.apache.poi.ss.SpreadsheetVersion;
import org.apache.poi.ss.formula.FormulaShifter;
import org.apache.poi.ss.formula.SheetNameFormatter;
-import org.apache.poi.ss.usermodel.*;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellRange;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.DataValidation;
+import org.apache.poi.ss.usermodel.DataValidationHelper;
+import org.apache.poi.ss.usermodel.Footer;
+import org.apache.poi.ss.usermodel.Header;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.CellRangeAddressList;
import org.apache.poi.ss.util.CellReference;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlOptions;
import org.openxmlformats.schemas.officeDocument.x2006.relationships.STRelationshipId;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTAutoFilter;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBreak;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCalcPr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellFormula;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCol;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColor;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCols;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTComment;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCommentList;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataValidation;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataValidations;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDrawing;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHeaderFooter;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTHyperlink;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTLegacyDrawing;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCell;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTMergeCells;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTOutlinePr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageBreak;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageMargins;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPageSetUpPr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPane;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPrintOptions;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTRow;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSelection;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetCalcPr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetFormatPr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetPr;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetProtection;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetView;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTSheetViews;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTablePart;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTTableParts;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCalcMode;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCellFormulaType;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPane;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STPaneState;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STUnsignedShortHex;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument;
/**
* High level representation of a SpreadsheetML worksheet.
XSSFRowShifter rowShifter = new XSSFRowShifter(this);
int sheetIndex = getWorkbook().getSheetIndex(this);
- FormulaShifter shifter = FormulaShifter.createForRowShift(sheetIndex, startRow, endRow, n);
+ String sheetName = getWorkbook().getSheetName(sheetIndex);
+ FormulaShifter shifter = FormulaShifter.createForRowShift(
+ sheetIndex, sheetName, startRow, endRow, n);
rowShifter.updateNamedRanges(shifter);
rowShifter.updateFormulas(shifter);
package org.apache.poi.xssf.usermodel.helpers;
-import org.apache.poi.xssf.usermodel.*;
-import org.apache.poi.ss.util.CellRangeAddress;
+import java.util.ArrayList;
+import java.util.List;
+
import org.apache.poi.ss.formula.FormulaParser;
-import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.formula.FormulaRenderer;
-import org.apache.poi.ss.usermodel.Row;
-import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.formula.FormulaShifter;
-import org.apache.poi.ss.formula.ptg.Ptg;
-import org.apache.poi.ss.formula.ptg.AreaPtg;
+import org.apache.poi.ss.formula.FormulaType;
import org.apache.poi.ss.formula.ptg.AreaErrPtg;
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;
-
-import java.util.List;
-import java.util.ArrayList;
+import org.apache.poi.ss.formula.ptg.AreaPtg;
+import org.apache.poi.ss.formula.ptg.Ptg;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFEvaluationWorkbook;
+import org.apache.poi.xssf.usermodel.XSSFName;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCell;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCellFormula;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCfRule;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTConditionalFormatting;
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCellFormulaType;
/**
* @author Yegor Kozlov
String shiftedFmla = FormulaRenderer.toFormulaString(fpb, ptgs);
name.setRefersToFormula(shiftedFmla);
}
-
}
}
package org.apache.poi.hssf.model;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
+
import org.apache.poi.ddf.EscherDggRecord;
import org.apache.poi.hssf.HSSFTestDataSamples;
-import org.apache.poi.hssf.record.*;
+import org.apache.poi.hssf.record.BOFRecord;
+import org.apache.poi.hssf.record.BlankRecord;
+import org.apache.poi.hssf.record.CellValueRecordInterface;
+import org.apache.poi.hssf.record.ColumnInfoRecord;
+import org.apache.poi.hssf.record.DimensionsRecord;
+import org.apache.poi.hssf.record.DrawingRecord;
+import org.apache.poi.hssf.record.EOFRecord;
+import org.apache.poi.hssf.record.EscherAggregate;
+import org.apache.poi.hssf.record.FormulaRecord;
+import org.apache.poi.hssf.record.GutsRecord;
+import org.apache.poi.hssf.record.IndexRecord;
+import org.apache.poi.hssf.record.MergeCellsRecord;
+import org.apache.poi.hssf.record.MulBlankRecord;
+import org.apache.poi.hssf.record.NoteRecord;
+import org.apache.poi.hssf.record.NumberRecord;
+import org.apache.poi.hssf.record.ObjRecord;
+import org.apache.poi.hssf.record.Record;
+import org.apache.poi.hssf.record.RecordBase;
+import org.apache.poi.hssf.record.RowRecord;
+import org.apache.poi.hssf.record.StringRecord;
+import org.apache.poi.hssf.record.TextObjectRecord;
+import org.apache.poi.hssf.record.UncalcedRecord;
+import org.apache.poi.hssf.record.WindowTwoRecord;
import org.apache.poi.hssf.record.aggregates.ConditionalFormattingTable;
import org.apache.poi.hssf.record.aggregates.PageSettingsBlock;
import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.util.HexRead;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
/**
* Unit test for the {@link InternalSheet} class.
*
List<RecordBase> sheetRecs = sheet.getRecords();
assertEquals(23, sheetRecs.size());
- FormulaShifter shifter = FormulaShifter.createForRowShift(0, 0, 0, 1);
+ FormulaShifter shifter = FormulaShifter.createForRowShift(0, "", 0, 0, 1);
sheet.updateFormulasAfterCellShift(shifter, 0);
if (sheetRecs.size() == 24 && sheetRecs.get(22) instanceof ConditionalFormattingTable) {
throw new AssertionFailedError("Identified bug 46547a");
int firstRowMoved, int lastRowMoved, int numberRowsMoved,
int expectedAreaFirstRow, int expectedAreaLastRow) {
- FormulaShifter fs = FormulaShifter.createForRowShift(0, firstRowMoved, lastRowMoved, numberRowsMoved);
+ FormulaShifter fs = FormulaShifter.createForRowShift(0, "", firstRowMoved, lastRowMoved, numberRowsMoved);
boolean expectedChanged = aptg.getFirstRow() != expectedAreaFirstRow || aptg.getLastRow() != expectedAreaLastRow;
AreaPtg copyPtg = (AreaPtg) aptg.copy(); // clone so we can re-use aptg in calling method