aboutsummaryrefslogtreecommitdiffstats
path: root/src/java
diff options
context:
space:
mode:
authorJosh Micich <josh@apache.org>2008-05-26 18:02:23 +0000
committerJosh Micich <josh@apache.org>2008-05-26 18:02:23 +0000
commit7c1e1f24785294d90c8dc76a1b033a07aeeb4d9d (patch)
treede429282c8ef17013faa0761262e74acb4431b1b /src/java
parentf8c3f05e7363534971537c37417718152db7b039 (diff)
downloadpoi-7c1e1f24785294d90c8dc76a1b033a07aeeb4d9d.tar.gz
poi-7c1e1f24785294d90c8dc76a1b033a07aeeb4d9d.zip
Follow-on fix for bug 42564 (r653668). Array elements are stored internally column by column.
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@660256 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java')
-rw-r--r--src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java44
1 files changed, 24 insertions, 20 deletions
diff --git a/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java b/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java
index 251009b287..49c66e0720 100644
--- a/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java
+++ b/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java
@@ -47,7 +47,7 @@ public class ArrayPtg extends Ptg {
protected Object[] token_3_arrayValues;
protected ArrayPtg() {
- //Required for clone methods
+ //Required for clone methods
}
public ArrayPtg(RecordInputStream in)
@@ -89,12 +89,16 @@ public class ArrayPtg extends Ptg {
for (int x=0;x<getColumnCount();x++) {
for (int y=0;y<getRowCount();y++) {
Object o = token_3_arrayValues[getValueIndex(x, y)];
- buffer.append("[").append(x).append("][").append(y).append("] = ").append(o).append("\n");
+ buffer.append("[").append(x).append("][").append(y).append("] = ").append(o).append("\n");
}
}
return buffer.toString();
}
+ /**
+ * Note - (2D) array elements are stored column by column
+ * @return the index into the internal 1D array for the specified column and row
+ */
/* package */ int getValueIndex(int colIx, int rowIx) {
if(colIx < 0 || colIx >= token_1_columns) {
throw new IllegalArgumentException("Specified colIx (" + colIx
@@ -104,7 +108,7 @@ public class ArrayPtg extends Ptg {
throw new IllegalArgumentException("Specified rowIx (" + rowIx
+ ") is outside the allowed range (0.." + (token_2_rows-1) + ")");
}
- return rowIx * token_1_columns + colIx;
+ return rowIx + token_2_rows * colIx;
}
public void writeBytes(byte[] data, int offset) {
@@ -137,22 +141,21 @@ public class ArrayPtg extends Ptg {
return size;
}
- public String toFormulaString(HSSFWorkbook book)
- {
+ public String toFormulaString(HSSFWorkbook book) {
StringBuffer b = new StringBuffer();
b.append("{");
- for (int x=0;x<getColumnCount();x++) {
- if (x > 0) {
+ for (int x = 0; x < getColumnCount(); x++) {
+ if (x > 0) {
b.append(";");
}
- for (int y=0;y<getRowCount();y++) {
+ for (int y = 0; y < getRowCount(); y++) {
if (y > 0) {
b.append(",");
}
- Object o = token_3_arrayValues[getValueIndex(x, y)];
- b.append(getConstantText(o));
- }
- }
+ Object o = token_3_arrayValues[getValueIndex(x, y)];
+ b.append(getConstantText(o));
+ }
+ }
b.append("}");
return b.toString();
}
@@ -166,6 +169,7 @@ public class ArrayPtg extends Ptg {
return "\"" + ((UnicodeString)o).getString() + "\"";
}
if (o instanceof Double) {
+ // TODO - numeric array elements need default Excel number formatting
return ((Double)o).toString();
}
if (o instanceof Boolean) {
@@ -182,13 +186,13 @@ public class ArrayPtg extends Ptg {
}
public Object clone() {
- ArrayPtg ptg = new ArrayPtg();
- ptg.field_1_reserved = (byte[]) field_1_reserved.clone();
-
- ptg.token_1_columns = token_1_columns;
- ptg.token_2_rows = token_2_rows;
- ptg.token_3_arrayValues = (Object[]) token_3_arrayValues.clone();
- ptg.setClass(ptgClass);
- return ptg;
+ ArrayPtg ptg = new ArrayPtg();
+ ptg.field_1_reserved = (byte[]) field_1_reserved.clone();
+
+ ptg.token_1_columns = token_1_columns;
+ ptg.token_2_rows = token_2_rows;
+ ptg.token_3_arrayValues = (Object[]) token_3_arrayValues.clone();
+ ptg.setClass(ptgClass);
+ return ptg;
}
}