diff options
author | Evgeniy Berlog <berlog@apache.org> | 2012-09-09 13:21:38 +0000 |
---|---|---|
committer | Evgeniy Berlog <berlog@apache.org> | 2012-09-09 13:21:38 +0000 |
commit | a0ad9be37d61f5c11fe0bb49e824dfdd8127e4ed (patch) | |
tree | 2ee602699b92ae8af2f2a5fd06ab6df0ceb9d9d2 | |
parent | 8a8bf7d3933c9431a255addf9ab46d8bab018338 (diff) | |
download | poi-a0ad9be37d61f5c11fe0bb49e824dfdd8127e4ed.tar.gz poi-a0ad9be37d61f5c11fe0bb49e824dfdd8127e4ed.zip |
fixed bug 46250
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1382494 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java | 18 | ||||
-rw-r--r-- | src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java | 6 | ||||
-rw-r--r-- | src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java | 14 | ||||
-rw-r--r-- | test-data/spreadsheet/46250.xls | bin | 0 -> 97792 bytes |
4 files changed, 35 insertions, 3 deletions
diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java index ffbcec50e6..584f426fd3 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSimpleShape.java @@ -170,7 +170,8 @@ public class HSSFSimpleShape extends HSSFShape HSSFRichTextString rtr = (HSSFRichTextString) string; // If font is not set we must set the default one if (rtr.numFormattingRuns() == 0) rtr.applyFont((short) 0); - _textObjectRecord.setStr(rtr); + TextObjectRecord txo = getOrCreateTextObjRecord(); + txo.setStr(rtr); if (string.getString() != null){ setPropertyValue(new EscherSimpleProperty(EscherProperties.TEXT__TEXTID, string.getString().hashCode())); } @@ -234,4 +235,19 @@ public class HSSFSimpleShape extends HSSFShape EscherSpRecord spRecord = getEscherContainer().getChildById(EscherSpRecord.RECORD_ID); spRecord.setShapeType((short) value); } + + private TextObjectRecord getOrCreateTextObjRecord(){ + if (getTextObjectRecord() == null){ + _textObjectRecord = createTextObjRecord(); + } + EscherTextboxRecord escherTextbox = getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID); + if (null == escherTextbox){ + escherTextbox = new EscherTextboxRecord(); + escherTextbox.setRecordId(EscherTextboxRecord.RECORD_ID); + escherTextbox.setOptions((short) 0x0000); + getEscherContainer().addChildRecord(escherTextbox); + getPatriarch()._getBoundAggregate().associateShapeToObjRecord(escherTextbox, _textObjectRecord); + } + return _textObjectRecord; + } } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java b/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java index 4260ead638..dacdadd4f5 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFTextbox.java @@ -133,7 +133,9 @@ public class HSSFTextbox extends HSSFSimpleShape { void afterInsert(HSSFPatriarch patriarch) { EscherAggregate agg = patriarch._getBoundAggregate(); agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherClientDataRecord.RECORD_ID), getObjRecord()); - agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID), getTextObjectRecord()); + if (getTextObjectRecord() != null){ + agg.associateShapeToObjRecord(getEscherContainer().getChildById(EscherTextboxRecord.RECORD_ID), getTextObjectRecord()); + } } /** @@ -231,7 +233,7 @@ public class HSSFTextbox extends HSSFSimpleShape { @Override protected HSSFShape cloneShape() { - TextObjectRecord txo = (TextObjectRecord) getTextObjectRecord().cloneViaReserialise(); + TextObjectRecord txo = getTextObjectRecord() == null ? null : (TextObjectRecord) getTextObjectRecord().cloneViaReserialise(); EscherContainerRecord spContainer = new EscherContainerRecord(); byte[] inSp = getEscherContainer().serialize(); spContainer.fillFields(inSp, 0, new DefaultEscherRecordFactory()); diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java index 9c566b05b1..8f4a4ec652 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java @@ -2283,4 +2283,18 @@ if(1==2) { wb = writeOutAndReadBack((HSSFWorkbook) wb); assertEquals(wb.getAllPictures().size(), 1); } + + public void test46250(){ + Workbook wb = openSample("46250.xls"); + Sheet sh = wb.getSheet("Template"); + Sheet cSh = wb.cloneSheet(wb.getSheetIndex(sh)); + + HSSFPatriarch patriarch = (HSSFPatriarch) cSh.createDrawingPatriarch(); + HSSFTextbox tb = (HSSFTextbox) patriarch.getChildren().get(2); + + tb.setString(new HSSFRichTextString("POI test")); + tb.setAnchor(new HSSFClientAnchor(0,0,0,0,(short)0,0,(short)10,10)); + + wb = writeOutAndReadBack((HSSFWorkbook) wb); + } } diff --git a/test-data/spreadsheet/46250.xls b/test-data/spreadsheet/46250.xls Binary files differnew file mode 100644 index 0000000000..7260bf3c60 --- /dev/null +++ b/test-data/spreadsheet/46250.xls |