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());
 }
}

Reply via email to