]> source.dussan.org Git - poi.git/commitdiff
[github-657] SXSSF: support setting an arbitrary extra width value for column widths
authorPJ Fanning <fanningpj@apache.org>
Wed, 21 Aug 2024 11:35:20 +0000 (11:35 +0000)
committerPJ Fanning <fanningpj@apache.org>
Wed, 21 Aug 2024 11:35:20 +0000 (11:35 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1920107 13f79535-47bb-0310-9956-ffa450edef68

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

index 0891b300a711a3fac82d08be862b843f05049ec6..965f23a03ed6c276280bb24534ff52783a18318b 100644 (file)
@@ -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);
     }
 }
index f32ac9bb2cf29447549d87acaa24f752990301b2..bd0f7c3dc1676ca81646b270430e07e61a096564 100644 (file)
@@ -379,7 +379,6 @@ public class SXSSFSheet implements Sheet, OoxmlSheetExtensions {
         _sh.setDefaultRowHeightInPoints(height);
     }
 
-
     /**
      * Get VML drawing for this sheet (aka 'legacy' drawing).
      *
@@ -1452,6 +1451,33 @@ public class SXSSFSheet implements Sheet, OoxmlSheetExtensions {
         _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.