如何避免使用Java的Excel中不可打印的字符?

我正在使用附加代码将.XLSX文件转换为.CSV文件。 除了一种情况,它工作正常。 代码不能处理不可打印的Excel字符。 如果在Excel中发现任何这样的字符,它将在CSV文件中创build一个额外的行。 我不能告诉它是什么字符,因为它在Excel中不可见,并且在应用Excel Clean()公式时消失。

我怎样才能在Java中处理这个?

感谢马杜。

 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.util.Iterator; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; class XlsxtoCSV { static void xlsx(File inputFile, File outputFile) { // For storing data into CSV files //System.out.println("Calling ::::::::::::::::::: method"); StringBuffer data = new StringBuffer(); try { FileOutputStream fos = new FileOutputStream(outputFile); // Get the workbook object for XLSX file XSSFWorkbook wBook = new XSSFWorkbook(new FileInputStream(inputFile)); // Get first sheet from the workbook XSSFSheet sheet = wBook.getSheetAt(0); Row row; Cell cell = null; Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { row = rowIterator.next(); Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { cell = cellIterator.next(); switch (cell.getCellType()) { case Cell.CELL_TYPE_BOOLEAN: data.append(cell.getBooleanCellValue() + ","); break; case Cell.CELL_TYPE_NUMERIC: data.append(cell.getNumericCellValue() + ","); break; case Cell.CELL_TYPE_STRING: String st=cell.getStringCellValue(); if(st.contains("\"")) { st=st.replaceAll("\"", ""); } if(st.contains(",")) { st="\"" + st + "\""; } if(st.contains("\n")) { st=st.replaceAll("\n", " "); } data.append(st + ","); break; case Cell.CELL_TYPE_BLANK: data.append("" + ","); break; default: data.append(cell + ","); } } data.append("\n"); } fos.write(data.toString().getBytes()); fos.close(); } catch (Exception ioe) { ioe.printStackTrace(); System.out.println(ioe); } } public static void main(String[] args) { File inputFile = new File("D:/test.xlsx"); File outputFile = new File("D:/test.csv"); xlsx(inputFile, outputFile); } }