POI XSSF读取所有列,而不仅仅是所有定义的列-预期结果不正确

问题描述 投票:0回答:1

是否有一种方法无法读取整个Excel文档行,我正在读取文档中定义的单元格,但是,它正在拉入整个工作表的列????

我正在将Excel文档转换为CSV文档。我得到这个结果。

Aircraft ID (FADEC_SHIP_POS),Fleet (Fleet Name),Fault Date (TIMESTAMP or FADEC_DATE_TIME),Fault ID (FADEC_ID),Fault Description (FADEC_FAULT_DESCRIPTION),Priority (FADEC_PRIORITY),ATA,Flight Phase (FM),Report Type (REPORT_TYPE),Flight Number (FLT),Origin (ORIG),Destination (DEST),Site Reference Name,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

我不需要所有这些额外的未定义列,((,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)

此外,该行的已定义列中可以有空值:-这些是期望的和需要的]]

6808-1,B757,2019-09-25 20:50:18,351-21A,P(S) 351-21,3,,Climb,901,1278,,,Sprint Airlines

我的班

public class XlsxToCsv implements Processor {

private Logger log = Logger.getLogger(XlsxToCsv.class.getName());

 private static final String CSV_SEPERATOR_CHAR=",";
 private static final String NEW_LINE_CHARACTER="\r\n";

@Override
public void process(Exchange exchange) throws Exception {

    log.info("Entering XLSX Excel to CSV ...");

    int sheetIdx = 0;
    byte[] in = exchange.getIn().getBody(byte[].class);
    String out = excelToCSV(in,sheetIdx);
    exchange.getIn().setBody(out);

    log.info("Exiting XLSX Excel to CSV ...");
}

private String excelToCSV(byte[] xlsxFile, int sheetIdx) throws Exception {

    InputStream is = null;
    StringBuffer sb = new StringBuffer();
    String cellVal = "";

    try {
        is = new ByteArrayInputStream(xlsxFile);
    } catch (Exception e) {
        e.printStackTrace();
    } 

    XSSFWorkbook workBook = new XSSFWorkbook(is);
    XSSFSheet workSheet = workBook.getSheetAt(sheetIdx);

    for (int i = 0; i < workSheet.getPhysicalNumberOfRows(); i++) {
        XSSFRow row = workSheet.getRow(i);
        for (int j = 0; j < row.getPhysicalNumberOfCells(); j++) {
            cellVal = getCellValueAsString(workBook, row.getCell(j));
                if ( j == row.getPhysicalNumberOfCells() - 1) {
                    sb.append(cellVal).append(NEW_LINE_CHARACTER);
                } else {
                    sb.append(cellVal).append(CSV_SEPERATOR_CHAR);
                }
        }
    }
    workBook.close();
    return sb.toString();
}
    private String getCellValueAsString(XSSFWorkbook workbook, XSSFCell cell) {
        String cellValue = "";
        if (cell != null) {
            CellType cellType = cell.getCellType();
            if (cellType == CellType.FORMULA) {
                FormulaEvaluator evaluator = workbook.getCreationHelper().createFormulaEvaluator();
                cellType = evaluator.evaluateFormulaCell(cell);
            }
            switch (cellType) {
                case STRING:
                    cellValue = cell.getStringCellValue();
                    break;
                case NUMERIC:
                    Double doubleValue = cell.getNumericCellValue();
                    int intValue = doubleValue.intValue();
                    cellValue = Integer.toString(intValue);
                    break;
                case BOOLEAN:
                    cellValue = Boolean.toString(cell.getBooleanCellValue());
                    break;
                case ERROR:
                    cellValue = cell.getErrorCellString();
                    break;
                case BLANK:
                    break;
                default:
                    break;
            }
        }

        return cellValue;
    }

}

是否有一种方法无法读取整个Excel文档行,我正在读取文档中定义的单元格,但是,它正在拉入整个工作表的列????我正在将Excel文档转换为...

java apache-camel apache-poi xssf
1个回答
0
投票

事实证明,我正在使用的模板在电子表格的最后一个元素中输入了空格,我删除并清理了xlsx模板,该模板可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.