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