You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by fa...@apache.org on 2021/10/18 17:15:04 UTC

svn commit: r1894357 - in /poi/trunk: poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/ poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/extensions/ poi/src/main/java/org/apache/poi/hssf/usermodel/ poi/src/test/java/org/apache/poi/hssf/usermo...

Author: fanningpj
Date: Mon Oct 18 17:15:04 2021
New Revision: 1894357

URL: http://svn.apache.org/viewvc?rev=1894357&view=rev
Log:
[bug-65638] Remove escaping of ampersand from headers and footers created by Excel. Thanks to Viru.

Added:
    poi/trunk/test-data/spreadsheet/AmpersandHeader.xls   (with props)
    poi/trunk/test-data/spreadsheet/AmpersandHeader.xlsx   (with props)
Modified:
    poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/TestXSSFSheet.java
    poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/extensions/TestXSSFHeaderFooter.java
    poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HeaderFooter.java
    poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java
    poi/trunk/poi/src/test/java9/module-info.class

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=1894357&r1=1894356&r2=1894357&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 Mon Oct 18 17:15:04 2021
@@ -179,6 +179,20 @@ public final class TestXSSFSheet extends
     }
 
     @Test
+    void testHeaderWithAmpersand() throws IOException {
+        try (XSSFWorkbook wb = XSSFTestDataSamples.openSampleWorkbook("AmpersandHeader.xlsx")) {
+            XSSFSheet s = wb.getSheetAt(0);
+            XSSFOddHeader hdr = (XSSFOddHeader) s.getHeader();
+            assertEquals("one && two &&&&", hdr.getCenter());
+            hdr.setAreFieldsStripped(true);
+
+            // In Excel headers fields start with '&'
+            // For '&' to appear as text it needs to be escaped as '&&'
+            assertEquals("one & two &&", hdr.getCenter());
+        }
+    }
+
+    @Test
     void getAllHeadersFooters() throws IOException {
         try (XSSFWorkbook workbook = new XSSFWorkbook()) {
             XSSFSheet sheet = workbook.createSheet("Sheet 1");

Modified: poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/extensions/TestXSSFHeaderFooter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/extensions/TestXSSFHeaderFooter.java?rev=1894357&r1=1894356&r2=1894357&view=diff
==============================================================================
--- poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/extensions/TestXSSFHeaderFooter.java (original)
+++ poi/trunk/poi-ooxml/src/test/java/org/apache/poi/xssf/usermodel/extensions/TestXSSFHeaderFooter.java Mon Oct 18 17:15:04 2021
@@ -132,7 +132,7 @@ class TestXSSFHeaderFooter {
         assertEquals(simple, XSSFOddHeader.stripFields(withPage));
         assertEquals(simple, XSSFOddHeader.stripFields(withLots));
         assertEquals(simple, XSSFOddHeader.stripFields(withFont));
-        assertEquals(simple + "&&", XSSFOddHeader.stripFields(withOtherAnds));
+        assertEquals(simple + "&", XSSFOddHeader.stripFields(withOtherAnds));
         assertEquals(simple + "&a&b", XSSFOddHeader.stripFields(withOtherAnds2));
 
         // Now test the default strip flag

Modified: poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HeaderFooter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HeaderFooter.java?rev=1894357&r1=1894356&r2=1894357&view=diff
==============================================================================
--- poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HeaderFooter.java (original)
+++ poi/trunk/poi/src/main/java/org/apache/poi/hssf/usermodel/HeaderFooter.java Mon Oct 18 17:15:04 2021
@@ -298,10 +298,13 @@ public abstract class HeaderFooter imple
 
         // Now do the tricky, dynamic ones
         // These are things like font sizes, font names and colours
-        text = text.replaceAll("\\&\\d+", "");
-        text = text.replaceAll("\\&\".*?,.*?\"", "");
-        text = text.replaceAll("\\&K[\\dA-F]{6}", "");
-        text = text.replaceAll("\\&K[\\d]{2}[+][\\d]{3}", "");
+        text = text.replaceAll("&\\d+", "");
+        text = text.replaceAll("&\".*?,.*?\"", "");
+        text = text.replaceAll("&K[\\dA-F]{6}", "");
+        text = text.replaceAll("&K[\\d]{2}[+][\\d]{3}", "");
+
+        text = text.replaceAll("&&", "&");
+
 
         // All done
         return text;

Modified: poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java?rev=1894357&r1=1894356&r2=1894357&view=diff
==============================================================================
--- poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java (original)
+++ poi/trunk/poi/src/test/java/org/apache/poi/hssf/usermodel/TestHSSFHeaderFooter.java Mon Oct 18 17:15:04 2021
@@ -69,7 +69,7 @@ final class TestHSSFHeaderFooter {
         assertEquals(simple, HSSFHeader.stripFields(withPage));
         assertEquals(simple, HSSFHeader.stripFields(withLots));
         assertEquals(simple, HSSFHeader.stripFields(withFont));
-        assertEquals(simple + "&&", HSSFHeader.stripFields(withOtherAnds));
+        assertEquals(simple + "&", HSSFHeader.stripFields(withOtherAnds));
         assertEquals(simple + "&a&b", HSSFHeader.stripFields(withOtherAnds2));
 
         // Now test the default strip flag
@@ -192,4 +192,18 @@ final class TestHSSFHeaderFooter {
             assertEquals("bar", footer2.getCenter());
         }
     }
+
+    @Test
+    void testHeaderWithAmpersand() throws IOException {
+        try (HSSFWorkbook wb = openSampleWorkbook("AmpersandHeader.xls")) {
+            HSSFSheet s = wb.getSheetAt(0);
+            HSSFHeader h = s.getHeader();
+            String header = h.getCenter();
+            assertEquals("one && two &&&&", header);
+
+            // In Excel headers fields start with '&'
+            // For '&' to appear as text it needs to be escaped as '&&'
+            assertEquals("one & two &&", HSSFHeader.stripFields(header));
+        }
+    }
 }

Modified: poi/trunk/poi/src/test/java9/module-info.class
URL: http://svn.apache.org/viewvc/poi/trunk/poi/src/test/java9/module-info.class?rev=1894357&r1=1894356&r2=1894357&view=diff
==============================================================================
Binary files - no diff available.

Added: poi/trunk/test-data/spreadsheet/AmpersandHeader.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/AmpersandHeader.xls?rev=1894357&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/AmpersandHeader.xls
------------------------------------------------------------------------------
    svn:mime-type = application/vnd.ms-excel

Added: poi/trunk/test-data/spreadsheet/AmpersandHeader.xlsx
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/AmpersandHeader.xlsx?rev=1894357&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/AmpersandHeader.xlsx
------------------------------------------------------------------------------
--- svn:mime-type (added)
+++ svn:mime-type Mon Oct 18 17:15:04 2021
@@ -0,0 +1 @@
+application/vnd.openxmlformats-officedocument.spreadsheetml.sheet



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