mirror of https://github.com/apache/poi.git
Merged revisions 697145 via svnmerge from
https://svn.apache.org/repos/asf/poi/trunk ........ r697145 | josh | 2008-09-19 09:34:21 -0700 (Fri, 19 Sep 2008) | 1 line Some clean-up after r696898 (partitioning common formula logic). Fixed compiler error in example XLS2CSVmra ........ git-svn-id: https://svn.apache.org/repos/asf/poi/branches/ooxml@697148 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
10e2804058
commit
f6926898a1
|
@ -14,6 +14,7 @@
|
||||||
See the License for the specific language governing permissions and
|
See the License for the specific language governing permissions and
|
||||||
limitations under the License.
|
limitations under the License.
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
package org.apache.poi.hssf.eventusermodel.examples;
|
package org.apache.poi.hssf.eventusermodel.examples;
|
||||||
|
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
@ -29,7 +30,7 @@ import org.apache.poi.hssf.eventusermodel.MissingRecordAwareHSSFListener;
|
||||||
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener;
|
import org.apache.poi.hssf.eventusermodel.EventWorkbookBuilder.SheetRecordCollectingListener;
|
||||||
import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
|
import org.apache.poi.hssf.eventusermodel.dummyrecord.LastCellOfRowDummyRecord;
|
||||||
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
|
import org.apache.poi.hssf.eventusermodel.dummyrecord.MissingCellDummyRecord;
|
||||||
import org.apache.poi.hssf.model.FormulaParser;
|
import org.apache.poi.hssf.model.HSSFFormulaParser;
|
||||||
import org.apache.poi.hssf.record.BOFRecord;
|
import org.apache.poi.hssf.record.BOFRecord;
|
||||||
import org.apache.poi.hssf.record.BlankRecord;
|
import org.apache.poi.hssf.record.BlankRecord;
|
||||||
import org.apache.poi.hssf.record.BoolErrRecord;
|
import org.apache.poi.hssf.record.BoolErrRecord;
|
||||||
|
@ -54,21 +55,21 @@ public class XLS2CSVmra implements HSSFListener {
|
||||||
private int minColumns;
|
private int minColumns;
|
||||||
private POIFSFileSystem fs;
|
private POIFSFileSystem fs;
|
||||||
private PrintStream output;
|
private PrintStream output;
|
||||||
|
|
||||||
private int lastRowNumber;
|
private int lastRowNumber;
|
||||||
private int lastColumnNumber;
|
private int lastColumnNumber;
|
||||||
|
|
||||||
/** Should we output the formula, or the value it has? */
|
/** Should we output the formula, or the value it has? */
|
||||||
private boolean outputFormulaValues = true;
|
private boolean outputFormulaValues = true;
|
||||||
|
|
||||||
/** For parsing Formulas */
|
/** For parsing Formulas */
|
||||||
private SheetRecordCollectingListener workbookBuildingListener;
|
private SheetRecordCollectingListener workbookBuildingListener;
|
||||||
private HSSFWorkbook stubWorkbook;
|
private HSSFWorkbook stubWorkbook;
|
||||||
|
|
||||||
// Records we pick up as we process
|
// Records we pick up as we process
|
||||||
private SSTRecord sstRecord;
|
private SSTRecord sstRecord;
|
||||||
private FormatTrackingHSSFListener formatListener;
|
private FormatTrackingHSSFListener formatListener;
|
||||||
|
|
||||||
// For handling formulas with string results
|
// For handling formulas with string results
|
||||||
private int nextRow;
|
private int nextRow;
|
||||||
private int nextColumn;
|
private int nextColumn;
|
||||||
|
@ -85,7 +86,7 @@ public class XLS2CSVmra implements HSSFListener {
|
||||||
this.output = output;
|
this.output = output;
|
||||||
this.minColumns = minColumns;
|
this.minColumns = minColumns;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new XLS -> CSV converter
|
* Creates a new XLS -> CSV converter
|
||||||
* @param filename The file to process
|
* @param filename The file to process
|
||||||
|
@ -99,38 +100,38 @@ public class XLS2CSVmra implements HSSFListener {
|
||||||
System.out, minColumns
|
System.out, minColumns
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initiates the processing of the XLS file to CSV
|
* Initiates the processing of the XLS file to CSV
|
||||||
*/
|
*/
|
||||||
public void process() throws IOException {
|
public void process() throws IOException {
|
||||||
MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
|
MissingRecordAwareHSSFListener listener = new MissingRecordAwareHSSFListener(this);
|
||||||
formatListener = new FormatTrackingHSSFListener(listener);
|
formatListener = new FormatTrackingHSSFListener(listener);
|
||||||
|
|
||||||
HSSFEventFactory factory = new HSSFEventFactory();
|
HSSFEventFactory factory = new HSSFEventFactory();
|
||||||
HSSFRequest request = new HSSFRequest();
|
HSSFRequest request = new HSSFRequest();
|
||||||
|
|
||||||
if(outputFormulaValues) {
|
if(outputFormulaValues) {
|
||||||
request.addListenerForAllRecords(formatListener);
|
request.addListenerForAllRecords(formatListener);
|
||||||
} else {
|
} else {
|
||||||
workbookBuildingListener = new SheetRecordCollectingListener(formatListener);
|
workbookBuildingListener = new SheetRecordCollectingListener(formatListener);
|
||||||
request.addListenerForAllRecords(workbookBuildingListener);
|
request.addListenerForAllRecords(workbookBuildingListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
factory.processWorkbookEvents(request, fs);
|
factory.processWorkbookEvents(request, fs);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Main HSSFListener method, processes events, and outputs the
|
* Main HSSFListener method, processes events, and outputs the
|
||||||
* CSV as the file is processed.
|
* CSV as the file is processed.
|
||||||
*/
|
*/
|
||||||
public void processRecord(Record record) {
|
public void processRecord(Record record) {
|
||||||
int thisRow = -1;
|
int thisRow = -1;
|
||||||
int thisColumn = -1;
|
int thisColumn = -1;
|
||||||
String thisStr = null;
|
String thisStr = null;
|
||||||
|
|
||||||
switch (record.getSid())
|
switch (record.getSid())
|
||||||
{
|
{
|
||||||
case BOFRecord.sid:
|
case BOFRecord.sid:
|
||||||
BOFRecord br = (BOFRecord)record;
|
BOFRecord br = (BOFRecord)record;
|
||||||
if(br.getType() == BOFRecord.TYPE_WORKSHEET) {
|
if(br.getType() == BOFRecord.TYPE_WORKSHEET) {
|
||||||
|
@ -140,109 +141,109 @@ public class XLS2CSVmra implements HSSFListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SSTRecord.sid:
|
case SSTRecord.sid:
|
||||||
sstRecord = (SSTRecord) record;
|
sstRecord = (SSTRecord) record;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BlankRecord.sid:
|
case BlankRecord.sid:
|
||||||
BlankRecord brec = (BlankRecord) record;
|
BlankRecord brec = (BlankRecord) record;
|
||||||
|
|
||||||
thisRow = brec.getRow();
|
thisRow = brec.getRow();
|
||||||
thisColumn = brec.getColumn();
|
thisColumn = brec.getColumn();
|
||||||
thisStr = "";
|
thisStr = "";
|
||||||
break;
|
break;
|
||||||
case BoolErrRecord.sid:
|
case BoolErrRecord.sid:
|
||||||
BoolErrRecord berec = (BoolErrRecord) record;
|
BoolErrRecord berec = (BoolErrRecord) record;
|
||||||
|
|
||||||
thisRow = berec.getRow();
|
thisRow = berec.getRow();
|
||||||
thisColumn = berec.getColumn();
|
thisColumn = berec.getColumn();
|
||||||
thisStr = "";
|
thisStr = "";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FormulaRecord.sid:
|
case FormulaRecord.sid:
|
||||||
FormulaRecord frec = (FormulaRecord) record;
|
FormulaRecord frec = (FormulaRecord) record;
|
||||||
|
|
||||||
thisRow = frec.getRow();
|
thisRow = frec.getRow();
|
||||||
thisColumn = frec.getColumn();
|
thisColumn = frec.getColumn();
|
||||||
|
|
||||||
if(outputFormulaValues) {
|
if(outputFormulaValues) {
|
||||||
if(Double.isNaN( frec.getValue() )) {
|
if(Double.isNaN( frec.getValue() )) {
|
||||||
// Formula result is a string
|
// Formula result is a string
|
||||||
// This is stored in the next record
|
// This is stored in the next record
|
||||||
outputNextStringRecord = true;
|
outputNextStringRecord = true;
|
||||||
nextRow = frec.getRow();
|
nextRow = frec.getRow();
|
||||||
nextColumn = frec.getColumn();
|
nextColumn = frec.getColumn();
|
||||||
} else {
|
} else {
|
||||||
thisStr = formatListener.formatNumberDateCell(frec);
|
thisStr = formatListener.formatNumberDateCell(frec);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
thisStr = '"' +
|
thisStr = '"' +
|
||||||
FormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';
|
HSSFFormulaParser.toFormulaString(stubWorkbook, frec.getParsedExpression()) + '"';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case StringRecord.sid:
|
case StringRecord.sid:
|
||||||
if(outputNextStringRecord) {
|
if(outputNextStringRecord) {
|
||||||
// String for formula
|
// String for formula
|
||||||
StringRecord srec = (StringRecord)record;
|
StringRecord srec = (StringRecord)record;
|
||||||
thisStr = srec.getString();
|
thisStr = srec.getString();
|
||||||
thisRow = nextRow;
|
thisRow = nextRow;
|
||||||
thisColumn = nextColumn;
|
thisColumn = nextColumn;
|
||||||
outputNextStringRecord = false;
|
outputNextStringRecord = false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LabelRecord.sid:
|
case LabelRecord.sid:
|
||||||
LabelRecord lrec = (LabelRecord) record;
|
LabelRecord lrec = (LabelRecord) record;
|
||||||
|
|
||||||
thisRow = lrec.getRow();
|
thisRow = lrec.getRow();
|
||||||
thisColumn = lrec.getColumn();
|
thisColumn = lrec.getColumn();
|
||||||
thisStr = '"' + lrec.getValue() + '"';
|
thisStr = '"' + lrec.getValue() + '"';
|
||||||
break;
|
break;
|
||||||
case LabelSSTRecord.sid:
|
case LabelSSTRecord.sid:
|
||||||
LabelSSTRecord lsrec = (LabelSSTRecord) record;
|
LabelSSTRecord lsrec = (LabelSSTRecord) record;
|
||||||
|
|
||||||
thisRow = lsrec.getRow();
|
thisRow = lsrec.getRow();
|
||||||
thisColumn = lsrec.getColumn();
|
thisColumn = lsrec.getColumn();
|
||||||
if(sstRecord == null) {
|
if(sstRecord == null) {
|
||||||
thisStr = '"' + "(No SST Record, can't identify string)" + '"';
|
thisStr = '"' + "(No SST Record, can't identify string)" + '"';
|
||||||
} else {
|
} else {
|
||||||
thisStr = '"' + sstRecord.getString(lsrec.getSSTIndex()).toString() + '"';
|
thisStr = '"' + sstRecord.getString(lsrec.getSSTIndex()).toString() + '"';
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case NoteRecord.sid:
|
case NoteRecord.sid:
|
||||||
NoteRecord nrec = (NoteRecord) record;
|
NoteRecord nrec = (NoteRecord) record;
|
||||||
|
|
||||||
thisRow = nrec.getRow();
|
thisRow = nrec.getRow();
|
||||||
thisColumn = nrec.getColumn();
|
thisColumn = nrec.getColumn();
|
||||||
// TODO: Find object to match nrec.getShapeId()
|
// TODO: Find object to match nrec.getShapeId()
|
||||||
thisStr = '"' + "(TODO)" + '"';
|
thisStr = '"' + "(TODO)" + '"';
|
||||||
break;
|
break;
|
||||||
case NumberRecord.sid:
|
case NumberRecord.sid:
|
||||||
NumberRecord numrec = (NumberRecord) record;
|
NumberRecord numrec = (NumberRecord) record;
|
||||||
|
|
||||||
thisRow = numrec.getRow();
|
thisRow = numrec.getRow();
|
||||||
thisColumn = numrec.getColumn();
|
thisColumn = numrec.getColumn();
|
||||||
|
|
||||||
// Format
|
// Format
|
||||||
thisStr = formatListener.formatNumberDateCell(numrec);
|
thisStr = formatListener.formatNumberDateCell(numrec);
|
||||||
break;
|
break;
|
||||||
case RKRecord.sid:
|
case RKRecord.sid:
|
||||||
RKRecord rkrec = (RKRecord) record;
|
RKRecord rkrec = (RKRecord) record;
|
||||||
|
|
||||||
thisRow = rkrec.getRow();
|
thisRow = rkrec.getRow();
|
||||||
thisColumn = rkrec.getColumn();
|
thisColumn = rkrec.getColumn();
|
||||||
thisStr = '"' + "(TODO)" + '"';
|
thisStr = '"' + "(TODO)" + '"';
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle new row
|
// Handle new row
|
||||||
if(thisRow != -1 && thisRow != lastRowNumber) {
|
if(thisRow != -1 && thisRow != lastRowNumber) {
|
||||||
lastColumnNumber = -1;
|
lastColumnNumber = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle missing column
|
// Handle missing column
|
||||||
if(record instanceof MissingCellDummyRecord) {
|
if(record instanceof MissingCellDummyRecord) {
|
||||||
MissingCellDummyRecord mc = (MissingCellDummyRecord)record;
|
MissingCellDummyRecord mc = (MissingCellDummyRecord)record;
|
||||||
|
@ -250,7 +251,7 @@ public class XLS2CSVmra implements HSSFListener {
|
||||||
thisColumn = mc.getColumn();
|
thisColumn = mc.getColumn();
|
||||||
thisStr = "";
|
thisStr = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we got something to print out, do so
|
// If we got something to print out, do so
|
||||||
if(thisStr != null) {
|
if(thisStr != null) {
|
||||||
if(thisColumn > 0) {
|
if(thisColumn > 0) {
|
||||||
|
@ -258,13 +259,13 @@ public class XLS2CSVmra implements HSSFListener {
|
||||||
}
|
}
|
||||||
output.print(thisStr);
|
output.print(thisStr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update column and row count
|
// Update column and row count
|
||||||
if(thisRow > -1)
|
if(thisRow > -1)
|
||||||
lastRowNumber = thisRow;
|
lastRowNumber = thisRow;
|
||||||
if(thisColumn > -1)
|
if(thisColumn > -1)
|
||||||
lastColumnNumber = thisColumn;
|
lastColumnNumber = thisColumn;
|
||||||
|
|
||||||
// Handle end of row
|
// Handle end of row
|
||||||
if(record instanceof LastCellOfRowDummyRecord) {
|
if(record instanceof LastCellOfRowDummyRecord) {
|
||||||
// Print out any missing commas if needed
|
// Print out any missing commas if needed
|
||||||
|
@ -275,27 +276,27 @@ public class XLS2CSVmra implements HSSFListener {
|
||||||
output.print(',');
|
output.print(',');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We're onto a new row
|
// We're onto a new row
|
||||||
lastColumnNumber = -1;
|
lastColumnNumber = -1;
|
||||||
|
|
||||||
// End the row
|
// End the row
|
||||||
output.println();
|
output.println();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
if(args.length < 1) {
|
if(args.length < 1) {
|
||||||
System.err.println("Use:");
|
System.err.println("Use:");
|
||||||
System.err.println(" XLS2CSVmra <xls file> [min columns]");
|
System.err.println(" XLS2CSVmra <xls file> [min columns]");
|
||||||
System.exit(1);
|
System.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
int minColumns = -1;
|
int minColumns = -1;
|
||||||
if(args.length >= 2) {
|
if(args.length >= 2) {
|
||||||
minColumns = Integer.parseInt(args[1]);
|
minColumns = Integer.parseInt(args[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
XLS2CSVmra xls2csv = new XLS2CSVmra(args[0], minColumns);
|
XLS2CSVmra xls2csv = new XLS2CSVmra(args[0], minColumns);
|
||||||
xls2csv.process();
|
xls2csv.process();
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,18 +17,16 @@
|
||||||
|
|
||||||
package org.apache.poi.hssf.model;
|
package org.apache.poi.hssf.model;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.formula.Ptg;
|
import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFEvaluationWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFEvaluationWorkbook;
|
||||||
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
||||||
import org.apache.poi.ss.formula.FormulaParser;
|
import org.apache.poi.ss.formula.FormulaParser;
|
||||||
import org.apache.poi.ss.formula.FormulaParsingWorkbook;
|
import org.apache.poi.ss.formula.FormulaParsingWorkbook;
|
||||||
import org.apache.poi.ss.formula.FormulaRenderer;
|
import org.apache.poi.ss.formula.FormulaRenderer;
|
||||||
import org.apache.poi.ss.formula.FormulaRenderingWorkbook;
|
import org.apache.poi.ss.formula.FormulaType;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* HSSF wrapper for the {@link FormulaParser}
|
* HSSF wrapper for the {@link FormulaParser} and {@link FormulaRenderer}
|
||||||
*
|
*
|
||||||
* @author Josh Micich
|
* @author Josh Micich
|
||||||
*/
|
*/
|
||||||
|
@ -42,30 +40,28 @@ public final class HSSFFormulaParser {
|
||||||
// no instances of this class
|
// no instances of this class
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convenience method for parsing cell formulas. see {@link #parse(String, HSSFWorkbook, int)}
|
||||||
|
*/
|
||||||
public static Ptg[] parse(String formula, HSSFWorkbook workbook) {
|
public static Ptg[] parse(String formula, HSSFWorkbook workbook) {
|
||||||
return FormulaParser.parse(formula, createParsingWorkbook(workbook));
|
return FormulaParser.parse(formula, createParsingWorkbook(workbook));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param formulaType a constant from {@link FormulaType}
|
||||||
|
* @return the parsed formula tokens
|
||||||
|
*/
|
||||||
public static Ptg[] parse(String formula, HSSFWorkbook workbook, int formulaType) {
|
public static Ptg[] parse(String formula, HSSFWorkbook workbook, int formulaType) {
|
||||||
return FormulaParser.parse(formula, createParsingWorkbook(workbook), formulaType);
|
return FormulaParser.parse(formula, createParsingWorkbook(workbook), formulaType);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String toFormulaString(HSSFWorkbook book, List lptgs) {
|
|
||||||
return toFormulaString(HSSFEvaluationWorkbook.create(book), lptgs);
|
|
||||||
}
|
|
||||||
/**
|
/**
|
||||||
* Convenience method which takes in a list then passes it to the
|
* Static method to convert an array of {@link Ptg}s in RPN order
|
||||||
* other toFormulaString signature.
|
* to a human readable string format in infix mode.
|
||||||
* @param book workbook for 3D and named references
|
* @param book used for defined names and 3D references
|
||||||
* @param lptgs list of Ptg, can be null or empty
|
* @param ptgs must not be <code>null</code>
|
||||||
* @return a human readable String
|
* @return a human readable String
|
||||||
*/
|
*/
|
||||||
public static String toFormulaString(FormulaRenderingWorkbook book, List lptgs) {
|
|
||||||
Ptg[] ptgs = new Ptg[lptgs.size()];
|
|
||||||
lptgs.toArray(ptgs);
|
|
||||||
return FormulaRenderer.toFormulaString(book, ptgs);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String toFormulaString(HSSFWorkbook book, Ptg[] ptgs) {
|
public static String toFormulaString(HSSFWorkbook book, Ptg[] ptgs) {
|
||||||
return FormulaRenderer.toFormulaString(HSSFEvaluationWorkbook.create(book), ptgs);
|
return FormulaRenderer.toFormulaString(HSSFEvaluationWorkbook.create(book), ptgs);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
|
|
||||||
package org.apache.poi.ss.formula;
|
package org.apache.poi.ss.formula;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Stack;
|
import java.util.Stack;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.formula.AttrPtg;
|
import org.apache.poi.hssf.record.formula.AttrPtg;
|
||||||
|
@ -36,33 +35,17 @@ import org.apache.poi.hssf.record.formula.Ptg;
|
||||||
* @author Josh Micich
|
* @author Josh Micich
|
||||||
*/
|
*/
|
||||||
public class FormulaRenderer {
|
public class FormulaRenderer {
|
||||||
/**
|
|
||||||
* Convenience method which takes in a list then passes it to the
|
|
||||||
* other toFormulaString signature.
|
|
||||||
* @param book workbook for 3D and named references
|
|
||||||
* @param lptgs list of Ptg, can be null or empty
|
|
||||||
* @return a human readable String
|
|
||||||
*/
|
|
||||||
public static String toFormulaString(FormulaRenderingWorkbook book, List lptgs) {
|
|
||||||
String retval = null;
|
|
||||||
if (lptgs == null || lptgs.size() == 0) return "#NAME";
|
|
||||||
Ptg[] ptgs = new Ptg[lptgs.size()];
|
|
||||||
ptgs = (Ptg[])lptgs.toArray(ptgs);
|
|
||||||
retval = toFormulaString(book, ptgs);
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Static method to convert an array of Ptgs in RPN order
|
* Static method to convert an array of {@link Ptg}s in RPN order
|
||||||
* to a human readable string format in infix mode.
|
* to a human readable string format in infix mode.
|
||||||
* @param book workbook for named and 3D references
|
* @param book used for defined names and 3D references
|
||||||
* @param ptgs array of Ptg, can be null or empty
|
* @param ptgs must not be <code>null</code>
|
||||||
* @return a human readable String
|
* @return a human readable String
|
||||||
*/
|
*/
|
||||||
public static String toFormulaString(FormulaRenderingWorkbook book, Ptg[] ptgs) {
|
public static String toFormulaString(FormulaRenderingWorkbook book, Ptg[] ptgs) {
|
||||||
if (ptgs == null || ptgs.length == 0) {
|
if (ptgs == null || ptgs.length == 0) {
|
||||||
// TODO - what is the justification for returning "#NAME" (which is not "#NAME?", btw)
|
throw new IllegalArgumentException("ptgs must not be null");
|
||||||
return "#NAME";
|
|
||||||
}
|
}
|
||||||
Stack stack = new Stack();
|
Stack stack = new Stack();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue