Author: fanningpj
Date: Wed Mar 12 14:53:23 2025
New Revision: 1924335

URL: http://svn.apache.org/viewvc?rev=1924335&view=rev
Log:
add arbitrary extra width support to XSSFSheet

Modified:
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
    
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java?rev=1924335&r1=1924334&r2=1924335&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java 
(original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/usermodel/XSSFSheet.java 
Wed Mar 12 14:53:23 2025
@@ -104,6 +104,7 @@ public class XSSFSheet extends POIXMLDoc
     private final XSSFDataValidationHelper dataValidationHelper;
     private XSSFVMLDrawing xssfvmlDrawing;
     private CellRangeAddress dimensionOverride;
+    private double arbitraryExtraWidth = 0.0;
 
     /**
      * Creates new XSSFSheet   - called by XSSFWorkbook to create a sheet from 
scratch.
@@ -498,6 +499,7 @@ public class XSSFSheet extends POIXMLDoc
 
         if (width != -1) {
             width *= 256;
+            width += arbitraryExtraWidth;
             int maxColumnWidth = 255*256; // The maximum column width for an 
individual cell is 255 characters
             if (width > maxColumnWidth) {
                 width = maxColumnWidth;
@@ -508,6 +510,30 @@ public class XSSFSheet extends POIXMLDoc
     }
 
     /**
+     * Set the extra width added to the best-fit column width (default 0.0).
+     * <p>
+     *     Only applied to auto-sized columns.
+     * </p>
+     * @param arbitraryExtraWidth the extra width added to the best-fit column 
width
+     * @since 5.4.1
+     */
+    public void setArbitraryExtraWidth(final double arbitraryExtraWidth) {
+        this.arbitraryExtraWidth = arbitraryExtraWidth;
+    }
+
+    /**
+     * Get the extra width added to the best-fit column width.
+     * <p>
+     *     Only applied to auto-sized columns.
+     * </p>
+     * @return the extra width added to the best-fit column width
+     * @since 5.4.0
+     */
+    public double getArbitraryExtraWidth() {
+        return arbitraryExtraWidth;
+    }
+
+    /**
      * Return the sheet's existing drawing, or null if there isn't yet one.
      *
      * Use {@link #createDrawingPatriarch()} to get or create

Modified: 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java?rev=1924335&r1=1924334&r2=1924335&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
 Wed Mar 12 14:53:23 2025
@@ -241,6 +241,26 @@ public final class TestXSSFSheet extends
         }
     }
 
+    @Test
+    void autoSizeColumnWithArbitraryExtraWidth() throws IOException {
+        try (XSSFWorkbook workbook = new XSSFWorkbook()) {
+            XSSFSheet sheet = workbook.createSheet("Sheet 1");
+            XSSFCell cell = sheet.createRow(0).createCell(13);
+            cell.setCellValue("test");
+            sheet.autoSizeColumn(13);
+            final int size1 = sheet.getColumnWidth(13);
+
+            sheet.setArbitraryExtraWidth(10.0);
+            sheet.autoSizeColumn(13);
+            final int size2 = sheet.getColumnWidth(13);
+
+            assertEquals(size1 + 10, size2);
+
+            ColumnHelper columnHelper = sheet.getColumnHelper();
+            CTCol col = columnHelper.getColumn(13, false);
+            assertTrue(col.getBestFit());
+        }
+    }
 
     @Test
     void setCellComment() throws IOException {



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to