From 8840f717da8af3218c94d0d99f409ed1c77f8fe7 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Tue, 7 Feb 2012 10:46:55 +0000 Subject: [PATCH] Bugzilla 52527: avoid exception when matching shared formula records in HSSF git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1241419 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 1 + .../record/aggregates/SharedValueManager.java | 7 +++--- .../aggregates/TestSharedValueManager.java | 20 ++++++++++++++++++ test-data/spreadsheet/52527.xls | Bin 0 -> 33280 bytes 4 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 test-data/spreadsheet/52527.xls diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 3f0996a3fc..af3bbee4c2 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 52527 - avoid exception when matching shared formula records in HSSF 52568 - Added methods to set/get an XWPFRun's text color 52566 - Added methods to set/get vertical alignment and color in XWPFTableCell 52562 - Added methods to get/set a table row's Can't Split and Repeat Header attributes in XWPF diff --git a/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java b/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java index 81abdb6fd9..7f6e4022d7 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java @@ -158,6 +158,9 @@ public final class SharedValueManager { */ public SharedFormulaRecord linkSharedFormulaRecord(CellReference firstCell, FormulaRecordAggregate agg) { SharedFormulaGroup result = findFormulaGroupForCell(firstCell); + if(null == result) { + throw new RuntimeException("Failed to find a matching shared formula record"); + } result.add(agg); return result.getSFR(); } @@ -170,10 +173,6 @@ public final class SharedValueManager { } } SharedFormulaGroup sfg = _groupsCache.get(getKeyForCache(cellRef)); - if(null == sfg) { - // TODO - fix file "15228.xls" so it opens in Excel after rewriting with POI - throw new RuntimeException("Failed to find a matching shared formula record"); - } return sfg; } diff --git a/src/testcases/org/apache/poi/hssf/record/aggregates/TestSharedValueManager.java b/src/testcases/org/apache/poi/hssf/record/aggregates/TestSharedValueManager.java index 7e359a3fb1..aea5b321e3 100644 --- a/src/testcases/org/apache/poi/hssf/record/aggregates/TestSharedValueManager.java +++ b/src/testcases/org/apache/poi/hssf/record/aggregates/TestSharedValueManager.java @@ -192,4 +192,24 @@ public final class TestSharedValueManager extends TestCase { throw new RuntimeException(e); } } + + public void testBug52527() { + HSSFWorkbook wb1 = HSSFTestDataSamples.openSampleWorkbook("52527.xls"); + HSSFWorkbook wb2 = HSSFTestDataSamples.writeOutAndReadBack(wb1); + + assertEquals("IF(H3,LINEST(N9:N14,K9:M14,FALSE),LINEST(N8:N14,K8:M14,FALSE))", + wb1.getSheetAt(0).getRow(4).getCell(11).getCellFormula()); + assertEquals("IF(H3,LINEST(N9:N14,K9:M14,FALSE),LINEST(N8:N14,K8:M14,FALSE))", + wb2.getSheetAt(0).getRow(4).getCell(11).getCellFormula()); + + assertEquals("1/SQRT(J9)", + wb1.getSheetAt(0).getRow(8).getCell(10).getCellFormula()); + assertEquals("1/SQRT(J9)", + wb2.getSheetAt(0).getRow(8).getCell(10).getCellFormula()); + + assertEquals("1/SQRT(J26)", + wb1.getSheetAt(0).getRow(25).getCell(10).getCellFormula()); + assertEquals("1/SQRT(J26)", + wb2.getSheetAt(0).getRow(25).getCell(10).getCellFormula()); + } } diff --git a/test-data/spreadsheet/52527.xls b/test-data/spreadsheet/52527.xls new file mode 100644 index 0000000000000000000000000000000000000000..b20d7d71ea6c65c047b760cee34db9b055df87a2 GIT binary patch literal 33280 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

&;+g9CmQ0P;lBq4TWa<`JGWF$_ zOv6G;X2l{)rm@13S-BXQY#0Au#xXv%dH8LQfP>VuZD>X|su`5qoa5l;b&11?-+5?m z9u)?Kjhh>dc|8%76%=jP|cth>7DqT0sVnvRA#UuApON?&DlbvsT#bk@~Y z`h2av_LbGuK3{$7fz@ZWb*_%xg+2kw(iLFSC;)=0*EIQ->9K$9`8n49l3Zp8ndYKs zCQOU)!3fL$4V!YBqlmr@i^VG}lQ_^kU%dQtum5%PZqLo1c8jHp?t0b-*kMF&FtfY` zk$Z65LBR48b5!-5jGJ+MR(3HWXGK>aPDi{7k(^$}O?;b#cBL81s_P=);($(Mb^bemtTy?7F5MH}qy6msFvi|oWvaYN@ z>wOAh4~;et=V6OF@`C`P?z_n-?Mv zMI=Y{QH22f$>{$udfV Qf3p13ka|Z&|DE~&Us~QZk^lez literal 0 HcmV?d00001