You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2008/01/09 10:55:20 UTC

svn commit: r610328 - in /poi/trunk/src: java/org/apache/poi/hssf/usermodel/HSSFSheet.java testcases/org/apache/poi/hssf/data/43902.xls testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java

Author: nick
Date: Wed Jan  9 01:55:20 2008
New Revision: 610328

URL: http://svn.apache.org/viewvc?rev=610328&view=rev
Log:
Have autoSizeColumn skip over merged regions - bug #43902. Patch from Paolo

Added:
    poi/trunk/src/testcases/org/apache/poi/hssf/data/43902.xls   (with props)
Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java?rev=610328&r1=610327&r2=610328&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java Wed Jan  9 01:55:20 2008
@@ -1615,7 +1615,13 @@
         for (Iterator it = rowIterator(); it.hasNext();) {
             HSSFRow row = (HSSFRow) it.next();
             HSSFCell cell = row.getCell(column);
-            if (cell == null) continue;
+
+            boolean isCellInMergedRegion = false;
+            for (int i = 0 ; i < getNumMergedRegions() && ! isCellInMergedRegion; i++) {
+                isCellInMergedRegion = getMergedRegionAt(i).contains(row.getRowNum(), column);
+            }
+
+            if (cell == null | isCellInMergedRegion) continue;
 
             HSSFCellStyle style = cell.getCellStyle();
             HSSFFont font = wb.getFontAt(style.getFontIndex());

Added: poi/trunk/src/testcases/org/apache/poi/hssf/data/43902.xls
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/data/43902.xls?rev=610328&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/src/testcases/org/apache/poi/hssf/data/43902.xls
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java?rev=610328&r1=610327&r2=610328&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestHSSFSheet.java Wed Jan  9 01:55:20 2008
@@ -32,6 +32,7 @@
 import org.apache.poi.hssf.record.WSBoolRecord;
 import org.apache.poi.hssf.record.WindowTwoRecord;
 import org.apache.poi.hssf.util.Region;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
 import org.apache.poi.util.TempFile;
 
 /**
@@ -614,6 +615,44 @@
         workbook = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
         assertTrue("No Exceptions while reading file", true);
 
+    }
+    
+    public void testAutoSizeColumn() throws Exception {
+		String filename = System.getProperty("HSSF.testdata.path");
+		filename = filename + "/43902.xls";
+		String sheetName = "my sheet";
+		FileInputStream is = new FileInputStream(filename);
+		POIFSFileSystem fs = new POIFSFileSystem(is);
+		HSSFWorkbook wb = new HSSFWorkbook(fs);
+		HSSFSheet sheet = wb.getSheet(sheetName);
+		
+		// autoSize the first column and check its size before the merged region (1,0,1,1) is set:
+		// it has to be based on the 2nd row width
+		sheet.autoSizeColumn((short)0);
+		assertEquals("Column autosized with only one row: wrong width", (short)7169, sheet.getColumnWidth((short)0));
+		
+		//create a region over the 2nd row and auto size the first column
+		sheet.addMergedRegion(new Region(1,(short)0,1,(short)1));
+		sheet.autoSizeColumn((short)0);
+		ByteArrayOutputStream out = new ByteArrayOutputStream();
+		wb.write(out);
+		out.close();
+		
+		// check that the autoSized column width has ignored the 2nd row 
+		// because it is included in a merged region (Excel like behavior)
+		HSSFWorkbook wb2 = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+		HSSFSheet sheet2 = wb2.getSheet(sheetName);
+		assertEquals((short)3024, sheet2.getColumnWidth((short)0));
+		
+		// remove the 2nd row merged region and check that the 2nd row value is used to the autoSizeColumn width
+		sheet2.removeMergedRegion(1);
+		sheet2.autoSizeColumn((short)0);
+		out = new ByteArrayOutputStream();
+		wb2.write(out);
+		out.close();
+		HSSFWorkbook wb3 = new HSSFWorkbook(new ByteArrayInputStream(out.toByteArray()));
+		HSSFSheet sheet3 = wb3.getSheet(sheetName);
+		assertEquals((short)7169, sheet3.getColumnWidth((short)0));
     }
 
 	public static void main(java.lang.String[] args) {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org