From 0f4d8d90ed32a0485d4b3ddc19f7cbf42fea8a60 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Wed, 9 Jan 2008 13:37:06 +0000 Subject: [PATCH] Fix for bug #43058 - handle setting row grouping for sheets that lacked gutsrecords at that point git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@610384 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 1 + src/documentation/content/xdocs/status.xml | 1 + src/java/org/apache/poi/hssf/model/Sheet.java | 6 ++ .../apache/poi/hssf/usermodel/HSSFRow.java | 10 ++ .../apache/poi/hssf/data/NoGutsRecords.xls | Bin 0 -> 35328 bytes .../poi/hssf/usermodel/TestHSSFSheet.java | 98 ++++++++++++++++++ 6 files changed, 116 insertions(+) create mode 100644 src/testcases/org/apache/poi/hssf/data/NoGutsRecords.xls diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index 79eb0e914..4548b63bc 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -36,6 +36,7 @@ + 43058 - Support setting row grouping on files from CR IX, which lack GutsRecords 31795 - Support cloning of sheets with certain drawing objects on them 43902 - Don't consider merged regions when auto-sizing columns 42464 - Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 37383c816..5a0461620 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -33,6 +33,7 @@ + 43058 - Support setting row grouping on files from CR IX, which lack GutsRecords 31795 - Support cloning of sheets with certain drawing objects on them 43902 - Don't consider merged regions when auto-sizing columns 42464 - Avoid "Expected ExpPtg to be converted from Shared to Non-Shared Formula" on large, formula heavy worksheets diff --git a/src/java/org/apache/poi/hssf/model/Sheet.java b/src/java/org/apache/poi/hssf/model/Sheet.java index ff18f4636..c3f93b0a0 100644 --- a/src/java/org/apache/poi/hssf/model/Sheet.java +++ b/src/java/org/apache/poi/hssf/model/Sheet.java @@ -3144,7 +3144,13 @@ public class Sheet implements Model maxLevel = Math.max(rowRecord.getOutlineLevel(), maxLevel); } + // Grab the guts record, adding if needed GutsRecord guts = (GutsRecord) findFirstRecordBySid( GutsRecord.sid ); + if(guts == null) { + guts = new GutsRecord(); + records.add(guts); + } + // Set the levels onto it guts.setRowLevelMax( (short) ( maxLevel + 1 ) ); guts.setLeftRowGutter( (short) ( 29 + (12 * (maxLevel)) ) ); } diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java b/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java index 423b023af..6cea11fa0 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFRow.java @@ -223,6 +223,16 @@ public class HSSFRow { return rowNum; } + + /** + * Returns the rows outline level. Increased as you + * put it into more groups (outlines), reduced as + * you take it out of them. + * TODO - Should this really be public? + */ + protected int getOutlineLevel() { + return row.getOutlineLevel(); + } /** * used internally to add a cell. diff --git a/src/testcases/org/apache/poi/hssf/data/NoGutsRecords.xls b/src/testcases/org/apache/poi/hssf/data/NoGutsRecords.xls new file mode 100644 index 0000000000000000000000000000000000000000..c4340f6b83a07f10a7cf65141676bf7cd7b56765 GIT binary patch literal 35328 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 R*1-uV_&WZd?f+N;{{@g~L5lzY literal 0 HcmV?d00001 diff --git a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java index 9a6f9dca0..714cb8d2c 100644 --- a/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java +++ b/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java @@ -309,6 +309,104 @@ public class TestHSSFSheet assertEquals(1, sheetLS.getPrintSetup().getCopies()); } + public void testGroupRows() throws Exception { + HSSFWorkbook workbook = new HSSFWorkbook(); + HSSFSheet s = workbook.createSheet(); + HSSFRow r1 = s.createRow(0); + HSSFRow r2 = s.createRow(1); + HSSFRow r3 = s.createRow(2); + HSSFRow r4 = s.createRow(3); + HSSFRow r5 = s.createRow(4); + + assertEquals(0, r1.getOutlineLevel()); + assertEquals(0, r2.getOutlineLevel()); + assertEquals(0, r3.getOutlineLevel()); + assertEquals(0, r4.getOutlineLevel()); + assertEquals(0, r5.getOutlineLevel()); + + s.groupRow(2,3); + + assertEquals(0, r1.getOutlineLevel()); + assertEquals(0, r2.getOutlineLevel()); + assertEquals(1, r3.getOutlineLevel()); + assertEquals(1, r4.getOutlineLevel()); + assertEquals(0, r5.getOutlineLevel()); + + // Save and re-open + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + workbook.write(baos); + workbook = new HSSFWorkbook( + new ByteArrayInputStream(baos.toByteArray()) + ); + + s = workbook.getSheetAt(0); + r1 = s.getRow(0); + r2 = s.getRow(1); + r3 = s.getRow(2); + r4 = s.getRow(3); + r5 = s.getRow(4); + + assertEquals(0, r1.getOutlineLevel()); + assertEquals(0, r2.getOutlineLevel()); + assertEquals(1, r3.getOutlineLevel()); + assertEquals(1, r4.getOutlineLevel()); + assertEquals(0, r5.getOutlineLevel()); + } + + public void testGroupRowsExisting() throws Exception { + String filename = System.getProperty("HSSF.testdata.path"); + filename = filename + "/NoGutsRecords.xls"; + HSSFWorkbook workbook = + new HSSFWorkbook(new FileInputStream(filename)); + + HSSFSheet s = workbook.getSheetAt(0); + HSSFRow r1 = s.getRow(0); + HSSFRow r2 = s.getRow(1); + HSSFRow r3 = s.getRow(2); + HSSFRow r4 = s.getRow(3); + HSSFRow r5 = s.getRow(4); + HSSFRow r6 = s.getRow(5); + + assertEquals(0, r1.getOutlineLevel()); + assertEquals(0, r2.getOutlineLevel()); + assertEquals(0, r3.getOutlineLevel()); + assertEquals(0, r4.getOutlineLevel()); + assertEquals(0, r5.getOutlineLevel()); + assertEquals(0, r6.getOutlineLevel()); + + // This used to complain about lacking guts records + s.groupRow(2, 4); + + assertEquals(0, r1.getOutlineLevel()); + assertEquals(0, r2.getOutlineLevel()); + assertEquals(1, r3.getOutlineLevel()); + assertEquals(1, r4.getOutlineLevel()); + assertEquals(1, r5.getOutlineLevel()); + assertEquals(0, r6.getOutlineLevel()); + + // Save and re-open + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + workbook.write(baos); + workbook = new HSSFWorkbook( + new ByteArrayInputStream(baos.toByteArray()) + ); + + s = workbook.getSheetAt(0); + r1 = s.getRow(0); + r2 = s.getRow(1); + r3 = s.getRow(2); + r4 = s.getRow(3); + r5 = s.getRow(4); + r6 = s.getRow(5); + + assertEquals(0, r1.getOutlineLevel()); + assertEquals(0, r2.getOutlineLevel()); + assertEquals(1, r3.getOutlineLevel()); + assertEquals(1, r4.getOutlineLevel()); + assertEquals(1, r5.getOutlineLevel()); + assertEquals(0, r6.getOutlineLevel()); + } + /** * Test that the ProtectRecord is included when creating or cloning a sheet */