git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1894357 13f79535-47bb-0310-9956-ffa450edef68tags/REL_5_2_0
@@ -178,6 +178,20 @@ public final class TestXSSFSheet extends BaseTestXSheet { | |||
} | |||
} | |||
@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()) { |
@@ -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 |
@@ -298,10 +298,13 @@ public abstract class HeaderFooter implements org.apache.poi.ss.usermodel.Header | |||
// 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; |
@@ -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)); | |||
} | |||
} | |||
} |