Author: fanningpj
Date: Wed Aug 21 11:35:20 2024
New Revision: 1920107

URL: http://svn.apache.org/viewvc?rev=1920107&view=rev
Log:
[github-657] SXSSF: support setting an arbitrary extra width value for column 
widths

Modified:
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/AutoSizeColumnTracker.java
    
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/AutoSizeColumnTracker.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/AutoSizeColumnTracker.java?rev=1920107&r1=1920106&r2=1920107&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/AutoSizeColumnTracker.java
 (original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/AutoSizeColumnTracker.java
 Wed Aug 21 11:35:20 2024
@@ -60,6 +60,8 @@ import org.apache.poi.util.Internal;
     // Using a HashSet instead of a TreeSet because we don't care about order.
     private final Set<Integer> untrackedColumns = new HashSet<>();
     private boolean trackAllColumns;
+    // arbitraryExtraWidth is the extra width added to the best-fit column 
width (since POI 5.3.1)
+    private double arbitraryExtraWidth = 0.0d;
 
     /**
      * Tuple to store the column widths considering and not considering merged 
cells
@@ -116,7 +118,27 @@ import org.apache.poi.util.Internal;
         // If sheet needs to be saved, use a java.lang.ref.WeakReference to 
avoid garbage collector gridlock.
         defaultCharWidth = 
SheetUtil.getDefaultCharWidthAsFloat(sheet.getWorkbook());
     }
-    
+
+    /**
+     * Set the extra width added to the best-fit column width (default 0.0).
+     *
+     * @param arbitraryExtraWidth the extra width added to the best-fit column 
width
+     * @since 5.3.1
+     */
+    public void setArbitraryExtraWidth(final double arbitraryExtraWidth) {
+        this.arbitraryExtraWidth = arbitraryExtraWidth;
+    }
+
+    /**
+     * Get the extra width added to the best-fit column width.
+     *
+     * @return the extra width added to the best-fit column width
+     * @since 5.3.1
+     */
+    public double getArbitraryExtraWidth() {
+        return arbitraryExtraWidth;
+    }
+
     /**
      * Get the currently tracked columns, naturally ordered.
      * Note if all columns are tracked, this will only return the columns that 
have been explicitly or implicitly tracked,
@@ -369,8 +391,10 @@ import org.apache.poi.util.Internal;
      * @since 3.14beta1
      */
     private void updateColumnWidth(final Cell cell, final ColumnWidthPair 
pair) {
-        final double unmergedWidth = SheetUtil.getCellWidth(cell, 
defaultCharWidth, dataFormatter, false);
-        final double mergedWidth = SheetUtil.getCellWidth(cell, 
defaultCharWidth, dataFormatter, true);
+        final double unmergedWidth =
+                SheetUtil.getCellWidth(cell, defaultCharWidth, dataFormatter, 
false) + arbitraryExtraWidth;
+        final double mergedWidth =
+                SheetUtil.getCellWidth(cell, defaultCharWidth, dataFormatter, 
true) + arbitraryExtraWidth;
         pair.setMaxColumnWidths(unmergedWidth, mergedWidth);
     }
 }

Modified: 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java
URL: 
http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java?rev=1920107&r1=1920106&r2=1920107&view=diff
==============================================================================
--- 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java 
(original)
+++ 
poi/trunk/poi-ooxml/src/main/java/org/apache/poi/xssf/streaming/SXSSFSheet.java 
Wed Aug 21 11:35:20 2024
@@ -379,7 +379,6 @@ public class SXSSFSheet implements Sheet
         _sh.setDefaultRowHeightInPoints(height);
     }
 
-
     /**
      * Get VML drawing for this sheet (aka 'legacy' drawing).
      *
@@ -1452,6 +1451,33 @@ public class SXSSFSheet implements Sheet
         _sh.setDefaultColumnStyle(column, style);
     }
 
+    /**
+     * Set the extra width added to the best-fit column width (default 0.0).
+     *
+     * @param arbitraryExtraWidth the extra width added to the best-fit column 
width
+     * @throws IllegalStateException if autoSizeColumnTracker failed to 
initialize (possibly due to fonts not being installed in your OS)
+     * @since 5.3.1
+     */
+    public void setArbitraryExtraWidth(final double arbitraryExtraWidth) {
+        if (_autoSizeColumnTracker == null) {
+            throw new IllegalStateException("Cannot trackColumnForAutoSizing 
because autoSizeColumnTracker failed to initialize (possibly due to fonts not 
being installed in your OS)");
+        }
+        _autoSizeColumnTracker.setArbitraryExtraWidth(arbitraryExtraWidth);
+    }
+
+    /**
+     * Get the extra width added to the best-fit column width.
+     *
+     * @return the extra width added to the best-fit column width
+     * @throws IllegalStateException if autoSizeColumnTracker failed to 
initialize (possibly due to fonts not being installed in your OS)
+     * @since 5.3.1
+     */
+    public double getArbitraryExtraWidth() {
+        if (_autoSizeColumnTracker == null) {
+            throw new IllegalStateException("Cannot trackColumnForAutoSizing 
because autoSizeColumnTracker failed to initialize (possibly due to fonts not 
being installed in your OS)");
+        }
+        return _autoSizeColumnTracker.getArbitraryExtraWidth();
+    }
 
     /**
      * Track a column in the sheet for auto-sizing.



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

Reply via email to