Hi again,
I finally had the time to make this into a JUnit test, I was going to
submit it as a bug to bugzilla, but encountered a bug during
registration...
For now, I will attach the JUnit code below (POI 3.9)
Regards,
Robert
package poi.test;
import static org.junit.Assert.*;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.junit.Test;
public class PoiControlCharacterTest {
private static final String PATH = "./myFile.xlsx";
@Test
public void testControlCharactersInSheetNames() throws Exception {
Workbook wb = new XSSFWorkbook();
String cellValue = "Test";
// String sheetName = "MySheet"; // works
String sheetName = "\u001f"; // can be written, but never opened
Sheet s = wb.createSheet(sheetName);
Row row = s.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(cellValue);
FileOutputStream fos = new FileOutputStream(PATH);
wb.write(fos);
fos.close();
// do not crash when opening
// bug causes org.apache.poi.POIXMLException:
org.apache.xmlbeans.XmlException: error: Illegal XML character: 0x1f
Workbook wb2 = new XSSFWorkbook(new FileInputStream(PATH));
Sheet s2 = wb2.getSheetAt(0);
assertEquals(sheetName, s2.getSheetName());
assertEquals(cellValue, s2.getRow(0).getCell(0).getStringCellValue());
}
}