From 5d3d269fafce8670563c1f552e3cad6dd7427fa4 Mon Sep 17 00:00:00 2001 From: Yegor Kozlov Date: Sun, 4 Oct 2009 10:08:47 +0000 Subject: [PATCH] fixed ColumnHelper to correctly handle columns included in a column span git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@821497 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/status.xml | 3 + .../apache/poi/xssf/usermodel/XSSFSheet.java | 3 +- .../xssf/usermodel/helpers/ColumnHelper.java | 8 +- .../poi/xssf/usermodel/TestXSSFSheet.java | 126 ++++++++++++++++++ test-data/spreadsheet/47804.xlsx | Bin 0 -> 29533 bytes test-data/spreadsheet/47862.xlsx | Bin 0 -> 8412 bytes 6 files changed, 135 insertions(+), 5 deletions(-) create mode 100644 test-data/spreadsheet/47804.xlsx create mode 100644 test-data/spreadsheet/47862.xlsx diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 446790656c..a84c71bfb9 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -33,6 +33,9 @@ + 47839 - improved API for OOXML custom properties + 47862 - fixed XSSFSheet.setColumnWidth to handle columns included in a column span + 47804 - fixed XSSFSheet.setColumnHidden to handle columns included in a column span 47889 - fixed XSSFCell.getStringCellValue() to properly handle cached formula results diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java index 4fb9185b90..8db42bc183 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheet.java @@ -1086,7 +1086,8 @@ public class XSSFSheet extends POIXMLDocumentPart implements Sheet { * @return hidden - false if the column is visible */ public boolean isColumnHidden(int columnIndex) { - return columnHelper.getColumn(columnIndex, false).getHidden(); + CTCol col = columnHelper.getColumn(columnIndex, false); + return col != null && col.getHidden(); } /** diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java index 4f8f33b5bc..8359ab818d 100644 --- a/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java +++ b/src/ooxml/java/org/apache/poi/xssf/usermodel/helpers/ColumnHelper.java @@ -72,7 +72,7 @@ public class ColumnHelper { worksheet.setColsArray(0, newCols); } - public void sortColumns(CTCols newCols) { + public static void sortColumns(CTCols newCols) { CTCol[] colArray = newCols.getColArray(); Arrays.sort(colArray, new CTColComparator()); newCols.setColArray(colArray); @@ -235,17 +235,17 @@ public class ColumnHelper { col.setBestFit(bestFit); } public void setCustomWidth(long index, boolean bestFit) { - CTCol col = getOrCreateColumn1Based(index+1, false); + CTCol col = getOrCreateColumn1Based(index+1, true); col.setCustomWidth(bestFit); } public void setColWidth(long index, double width) { - CTCol col = getOrCreateColumn1Based(index+1, false); + CTCol col = getOrCreateColumn1Based(index+1, true); col.setWidth(width); } public void setColHidden(long index, boolean hidden) { - CTCol col = getOrCreateColumn1Based(index+1, false); + CTCol col = getOrCreateColumn1Based(index+1, true); col.setHidden(hidden); } diff --git a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java index 39a1a4d766..d0110f410b 100644 --- a/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java +++ b/src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFSheet.java @@ -717,4 +717,130 @@ public class TestXSSFSheet extends BaseTestSheet { assertEquals(33.0, col.getWidth(), 0.0); assertTrue(col.getCustomWidth()); } + + /** + * Setting width of a column included in a column span + */ + public void test47862() { + XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("47862.xlsx"); + XSSFSheet sheet = wb.getSheetAt(0); + CTCols cols = sheet.getCTWorksheet().getColsArray(0); + // + // + // + + //a span of columns [1,5] + assertEquals(1, cols.sizeOfColArray()); + CTCol col = cols.getColArray(0); + assertEquals(1, col.getMin()); + assertEquals(5, col.getMax()); + double swidth = 15.77734375; //width of columns in the span + assertEquals(swidth, col.getWidth()); + + for (int i = 0; i < 5; i++) { + assertEquals((int)(swidth*256), sheet.getColumnWidth(i)); + } + + int[] cw = new int[]{10, 15, 20, 25, 30}; + for (int i = 0; i < 5; i++) { + sheet.setColumnWidth(i, cw[i]*256); + } + + //the check below failed prior to fix of Bug #47862 + ColumnHelper.sortColumns(cols); + // + // + // + // + // + // + // + + //now the span is splitted into 5 individual columns + assertEquals(5, cols.sizeOfColArray()); + for (int i = 0; i < 5; i++) { + assertEquals(cw[i]*256, sheet.getColumnWidth(i)); + assertEquals((double)cw[i], cols.getColArray(i).getWidth()); + } + + //serialize and check again + wb = getTestDataProvider().writeOutAndReadBack(wb); + sheet = wb.getSheetAt(0); + cols = sheet.getCTWorksheet().getColsArray(0); + assertEquals(5, cols.sizeOfColArray()); + for (int i = 0; i < 5; i++) { + assertEquals(cw[i]*256, sheet.getColumnWidth(i)); + assertEquals((double)cw[i], cols.getColArray(i).getWidth()); + } + } + + /** + * Hiding a column included in a column span + */ + public void test47804() { + XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("47804.xlsx"); + XSSFSheet sheet = wb.getSheetAt(0); + CTCols cols = sheet.getCTWorksheet().getColsArray(0); + assertEquals(2, cols.sizeOfColArray()); + CTCol col; + // + // + // + // + + //a span of columns [2,4] + col = cols.getColArray(0); + assertEquals(2, col.getMin()); + assertEquals(4, col.getMax()); + //individual column + col = cols.getColArray(1); + assertEquals(7, col.getMin()); + assertEquals(7, col.getMax()); + + sheet.setColumnHidden(2, true); // Column C + sheet.setColumnHidden(6, true); // Column G + + assertTrue(sheet.isColumnHidden(2)); + assertTrue(sheet.isColumnHidden(6)); + + //other columns but C and G are not hidden + assertFalse(sheet.isColumnHidden(1)); + assertFalse(sheet.isColumnHidden(3)); + assertFalse(sheet.isColumnHidden(4)); + assertFalse(sheet.isColumnHidden(5)); + + //the check below failed prior to fix of Bug #47804 + ColumnHelper.sortColumns(cols); + //the span is now splitted into three parts + // + // + // + // + // + // + + assertEquals(4, cols.sizeOfColArray()); + col = cols.getColArray(0); + assertEquals(2, col.getMin()); + assertEquals(2, col.getMax()); + col = cols.getColArray(1); + assertEquals(3, col.getMin()); + assertEquals(3, col.getMax()); + col = cols.getColArray(2); + assertEquals(4, col.getMin()); + assertEquals(4, col.getMax()); + col = cols.getColArray(3); + assertEquals(7, col.getMin()); + assertEquals(7, col.getMax()); + + //serialize and check again + wb = getTestDataProvider().writeOutAndReadBack(wb); + sheet = wb.getSheetAt(0); + assertTrue(sheet.isColumnHidden(2)); + assertTrue(sheet.isColumnHidden(6)); + assertFalse(sheet.isColumnHidden(1)); + assertFalse(sheet.isColumnHidden(3)); + assertFalse(sheet.isColumnHidden(4)); + assertFalse(sheet.isColumnHidden(5)); + } } diff --git a/test-data/spreadsheet/47804.xlsx b/test-data/spreadsheet/47804.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..7e143462897a6b90b8479444d94768d30e1309c9 GIT binary patch literal 29533 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 literal 0 HcmV?d00001 diff --git a/test-data/spreadsheet/47862.xlsx b/test-data/spreadsheet/47862.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..d5d19c8ca2b0ff229bb715343721adb94ff40fd7 GIT binary patch literal 8412 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 literal 0 HcmV?d00001