Excel以stringxls / xlsx不同的结果

我想比较Excel文件只是为了看看他们是否是相同的。 我可以select我的Excel文件并阅读它们。 我有两个相同内容的Excel表格,但一个.xls和.xlsx格式。 我使用下面的代码来读取我的文件(对于HSSFWorkbook的xls等)

private String xlsx(File inputFile) { String outputString = ""; // For storing data into String StringBuffer data = new StringBuffer(); try { // 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; // Iterate through each rows from first sheet Iterator<Row> rowIterator = sheet.iterator(); while (rowIterator.hasNext()) { row = rowIterator.next(); // For each row, iterate through each columns Iterator<Cell> cellIterator = row.cellIterator(); while (cellIterator.hasNext()) { cell = cellIterator.next(); data.append(cell + ";"); } data.append("\n"); } System.out.println(data.toString()); outputString = data.toString(); wBook.close(); } catch (Exception ioe) { ioe.printStackTrace(); } return outputString; } 

在我的Excel中,我有空白的单元格 – 当我用xls读取它们时,我得到DATA;;;;;DATA是正确的,但是当我在xlsx中做同样的操作时,我得到DATA;DATA

代码跳过空单元格? 我该如何解决这个问题? 提前致谢

经过一些更多的谷歌研究和尝试不同的事情,我find了解决我的问题。 迭代器跳过空的单元格,因为它们没有值 – 它们是空的 – 但是在xls文件中,它们看起来像是不是空的 – 无论

我的代码:

 private String xlsx(File inputFile) { String outputString = ""; System.out.println("start"); // For storing data into String StringBuffer data = new StringBuffer(); try { // 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); // Decide which rows to process int rowStart = 0; int rowEnd = sheet.getLastRowNum()+1; for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) { Row r = sheet.getRow(rowNum); int lastColumn = r.getLastCellNum(); for (int cn = 0; cn < lastColumn; cn++) { Cell c = r.getCell(cn); if (c == null) { data.append("" + ";"); } else { data.append(c + ";"); } } data.append("\n"); } System.out.println(data.toString()); outputString = data.toString(); wBook.close(); } catch (Exception ioe) { ioe.printStackTrace(); } System.out.println("end"); return outputString; }