Patch from Josh from bug #44606 - Support calculated string values for evaluated formulas
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@637595 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
f3193f779e
commit
8ca38c3e23
@ -36,6 +36,7 @@
|
|||||||
|
|
||||||
<!-- Don't forget to update status.xml too! -->
|
<!-- Don't forget to update status.xml too! -->
|
||||||
<release version="3.1-beta1" date="2008-??-??">
|
<release version="3.1-beta1" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44606 - Support calculated string values for evaluated formulas</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">Add accessors to horizontal and vertical alignment in HSSFTextbox</action>
|
<action dev="POI-DEVELOPERS" type="add">Add accessors to horizontal and vertical alignment in HSSFTextbox</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">44593 - Improved handling of short DVRecords</action>
|
<action dev="POI-DEVELOPERS" type="add">44593 - Improved handling of short DVRecords</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">28627 / 44580 - Fix Range.delete() in HWPF</action>
|
<action dev="POI-DEVELOPERS" type="add">28627 / 44580 - Fix Range.delete() in HWPF</action>
|
||||||
|
@ -33,6 +33,7 @@
|
|||||||
<!-- Don't forget to update changes.xml too! -->
|
<!-- Don't forget to update changes.xml too! -->
|
||||||
<changes>
|
<changes>
|
||||||
<release version="3.1-beta1" date="2008-??-??">
|
<release version="3.1-beta1" date="2008-??-??">
|
||||||
|
<action dev="POI-DEVELOPERS" type="fix">44606 - Support calculated string values for evaluated formulas</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">Add accessors to horizontal and vertical alignment in HSSFTextbox</action>
|
<action dev="POI-DEVELOPERS" type="add">Add accessors to horizontal and vertical alignment in HSSFTextbox</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">44593 - Improved handling of short DVRecords</action>
|
<action dev="POI-DEVELOPERS" type="add">44593 - Improved handling of short DVRecords</action>
|
||||||
<action dev="POI-DEVELOPERS" type="add">28627 / 44580 - Fix Range.delete() in HWPF</action>
|
<action dev="POI-DEVELOPERS" type="add">28627 / 44580 - Fix Range.delete() in HWPF</action>
|
||||||
|
@ -589,39 +589,37 @@ public class HSSFCell
|
|||||||
* change the cell to a string cell and set its value.
|
* change the cell to a string cell and set its value.
|
||||||
* If value is null then we will change the cell to a Blank cell.
|
* If value is null then we will change the cell to a Blank cell.
|
||||||
*/
|
*/
|
||||||
|
public void setCellValue(HSSFRichTextString value) {
|
||||||
public void setCellValue(HSSFRichTextString value)
|
|
||||||
{
|
|
||||||
int row=record.getRow();
|
int row=record.getRow();
|
||||||
short col=record.getColumn();
|
short col=record.getColumn();
|
||||||
short styleIndex=record.getXFIndex();
|
short styleIndex=record.getXFIndex();
|
||||||
if (value == null)
|
if (value == null) {
|
||||||
{
|
|
||||||
setCellType(CELL_TYPE_BLANK, false, row, col, styleIndex);
|
setCellType(CELL_TYPE_BLANK, false, row, col, styleIndex);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
else
|
if (cellType == CELL_TYPE_FORMULA) {
|
||||||
{
|
// Set the 'pre-evaluated result' for the formula
|
||||||
if ((cellType != CELL_TYPE_STRING ) && ( cellType != CELL_TYPE_FORMULA))
|
// note - formulas do not preserve text formatting.
|
||||||
{
|
FormulaRecordAggregate fr = (FormulaRecordAggregate) record;
|
||||||
|
// must make new sr because fr.getStringRecord() may be null
|
||||||
|
StringRecord sr = new StringRecord();
|
||||||
|
sr.setString(value.getString()); // looses format
|
||||||
|
fr.setStringRecord(sr);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cellType != CELL_TYPE_STRING) {
|
||||||
setCellType(CELL_TYPE_STRING, false, row, col, styleIndex);
|
setCellType(CELL_TYPE_STRING, false, row, col, styleIndex);
|
||||||
}
|
}
|
||||||
int index = 0;
|
int index = 0;
|
||||||
|
|
||||||
UnicodeString str = value.getUnicodeString();
|
UnicodeString str = value.getUnicodeString();
|
||||||
// jmh if (encoding == ENCODING_COMPRESSED_UNICODE)
|
|
||||||
// jmh {
|
|
||||||
// jmh str.setCompressedUnicode();
|
|
||||||
// jmh } else if (encoding == ENCODING_UTF_16)
|
|
||||||
// jmh {
|
|
||||||
// jmh str.setUncompressedUnicode();
|
|
||||||
// jmh }
|
|
||||||
index = book.addSSTString(str);
|
index = book.addSSTString(str);
|
||||||
(( LabelSSTRecord ) record).setSSTIndex(index);
|
(( LabelSSTRecord ) record).setSSTIndex(index);
|
||||||
stringValue = value;
|
stringValue = value;
|
||||||
stringValue.setWorkbookReferences(book, (( LabelSSTRecord ) record));
|
stringValue.setWorkbookReferences(book, (( LabelSSTRecord ) record));
|
||||||
stringValue.setUnicodeString(book.getSSTString(index));
|
stringValue.setUnicodeString(book.getSSTString(index));
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public void setCellFormula(String formula) {
|
public void setCellFormula(String formula) {
|
||||||
int row=record.getRow();
|
int row=record.getRow();
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/* ====================================================================
|
/* ====================================================================
|
||||||
Licensed to the Apache Software Foundation (ASF) under one or more
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
contributor license agreements. See the NOTICE file distributed with
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
@ -16,7 +15,6 @@
|
|||||||
limitations under the License.
|
limitations under the License.
|
||||||
==================================================================== */
|
==================================================================== */
|
||||||
|
|
||||||
|
|
||||||
package org.apache.poi.hssf.usermodel;
|
package org.apache.poi.hssf.usermodel;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -24,12 +22,11 @@ import java.io.FileInputStream;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.GregorianCalendar;
|
import java.util.GregorianCalendar;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
|
import junit.framework.AssertionFailedError;
|
||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.hssf.model.Sheet;
|
import org.apache.poi.hssf.model.Sheet;
|
||||||
import org.apache.poi.hssf.record.HyperlinkRecord;
|
|
||||||
import org.apache.poi.hssf.util.HSSFColor;
|
import org.apache.poi.hssf.util.HSSFColor;
|
||||||
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
|
||||||
import org.apache.poi.util.TempFile;
|
import org.apache.poi.util.TempFile;
|
||||||
@ -41,12 +38,7 @@ import org.apache.poi.util.TempFile;
|
|||||||
* @author Dan Sherman (dsherman at isisph.com)
|
* @author Dan Sherman (dsherman at isisph.com)
|
||||||
* @author Alex Jacoby (ajacoby at gmail.com)
|
* @author Alex Jacoby (ajacoby at gmail.com)
|
||||||
*/
|
*/
|
||||||
|
public final class TestHSSFCell extends TestCase {
|
||||||
public class TestHSSFCell
|
|
||||||
extends TestCase {
|
|
||||||
public TestHSSFCell(String s) {
|
|
||||||
super(s);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* test that Boolean and Error types (BoolErrRecord) are supported properly.
|
* test that Boolean and Error types (BoolErrRecord) are supported properly.
|
||||||
@ -388,6 +380,17 @@ extends TestCase {
|
|||||||
assertEquals("Formula", "A1+B1", c.toString());
|
assertEquals("Formula", "A1+B1", c.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testSetStringInFormulaCell_bug44606() {
|
||||||
|
HSSFWorkbook wb = new HSSFWorkbook();
|
||||||
|
HSSFCell cell = wb.createSheet("Sheet1").createRow(0).createCell((short)0);
|
||||||
|
cell.setCellFormula("B1&C1");
|
||||||
|
try {
|
||||||
|
cell.setCellValue(new HSSFRichTextString("hello"));
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new AssertionFailedError("Identified bug 44606");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
System.out
|
System.out
|
||||||
.println("Testing org.apache.poi.hssf.usermodel.TestHSSFCell");
|
.println("Testing org.apache.poi.hssf.usermodel.TestHSSFCell");
|
||||||
|
Loading…
Reference in New Issue
Block a user