From b2a1862f197122013f681ef08cfc860d8b6c4e62 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 29 Apr 2015 19:21:37 +0000 Subject: [PATCH] Patch from Jon Scharff from bug #57826 - If a XSSF shape has a buFont but no bullet character, mirror Excel and treat as un-bulleted git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1676831 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/xssf/usermodel/XSSFTextParagraph.java | 14 ++++++--- .../poi/xssf/usermodel/TestXSSFBugs.java | 28 ++++++++++++++++++ test-data/spreadsheet/57826.xlsx | Bin 0 -> 9090 bytes 3 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 test-data/spreadsheet/57826.xlsx diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java index c89d0cdb30..6500c1603c 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFTextParagraph.java @@ -709,13 +709,19 @@ public class XSSFTextParagraph implements Iterable{ public boolean isBullet() { ParagraphPropertyFetcher fetcher = new ParagraphPropertyFetcher(getLevel()){ public boolean fetch(CTTextParagraphProperties props){ - if(props.isSetBuNone()) { + if (props.isSetBuNone()) { setValue(false); return true; } - if(props.isSetBuFont() || props.isSetBuChar() || props.isSetBuAutoNum()){ - setValue(true); - return true; + if (props.isSetBuFont()) { + if (props.isSetBuChar() || props.isSetBuAutoNum()) { + setValue(true); + return true; + } else { + // Excel treats text with buFont but no char/autonum + // as not bulleted + // Possibly the font is just used if bullets turned on again? + } } return false; } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java index 71e008485f..003666958a 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFBugs.java @@ -2369,6 +2369,34 @@ public final class TestXSSFBugs extends BaseTestBugzillaIssues { checkStyle(styleBack); } + /** + * Paragraph with property BuFont but none of the properties + * BuNone, BuChar, and BuAutoNum, used to trigger a NPE + * Excel treats this as not-bulleted, so now do we + */ + @Test + public void testBug57826() { + XSSFWorkbook workbook = XSSFTestDataSamples.openSampleWorkbook("57826.xlsx"); + + assertTrue("no sheets in workbook", workbook.getNumberOfSheets() >= 1); + XSSFSheet sheet = workbook.getSheetAt(0); + + XSSFDrawing drawing = sheet.getDrawingPatriarch(); + assertNotNull(drawing); + + List shapes = drawing.getShapes(); + assertEquals(1, shapes.size()); + assertTrue(shapes.get(0) instanceof XSSFSimpleShape); + + XSSFSimpleShape shape = (XSSFSimpleShape)shapes.get(0); + + // Used to throw a NPE + String text = shape.getText(); + + // No bulleting info included + assertEquals("test ok", text); + } + private void checkStyle(XSSFCellStyle cellStyle) { assertNotNull(cellStyle); assertEquals(0, cellStyle.getFillForegroundColor()); diff --git a/test-data/spreadsheet/57826.xlsx b/test-data/spreadsheet/57826.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ccf2dc38fe9d55f21d9f2ede104aed01a6820524 GIT binary patch literal 9090 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