1

Excel の行をあるシートから別のシートにコピーする必要があります。しかし、実際の値の代わりにコピーした後、異なる値が得られます。文字列値を持つセルには問題はありませんが、数値には問題ありません。Excel セルには、任意のタイプの値を含めることができます。私のコードはそれらすべてを受け入れ、同じものを別のシートにコピーする必要があります。この場合、私を助けてください。

if(row.getCell(getLastCell)!=null && ((row.getCell(getLastCell).toString().equalsIgnoreCase(FAIL))|| (row.getCell(getLastCell).toString().equalsIgnoreCase("Invalid CR Statement"))))
            {
                failuresRow=failuresSheet.createRow(createNewRow++);
                for(int ii=0;ii<=getLastCell;ii++)
                {
                    failuresCell=failuresRow.createCell(ii);
                    failuresCell.setCellValue(row.getCell(ii)+"");
                    failuresCell.setCellType(row.getCell(ii).getCellType());
                    failuresCell.setCellStyle(row.getCell(ii).getCellStyle());
             }

            }

row.getCell(ii)+"" はセル型を文字列に変換することを知っていますが、任意の型のデータを持つことができるセルを受け入れるように setCellValue を設定したいと思います (例: 日付、ブール値、文字列、数値など)。 ……)

私は DataFormatter を使用してみましたが、以下のように他の方法でも使用しましたが、使用できません。

  failuresCell.setCellValue(df.formatCellValue(row.getCell(ii)));


   switch (cell.getCellType()) {
            case Cell.CELL_TYPE_STRING:
                failuresCell.setCellValue(cell.getRichStringCellValue().getString());
                break;
            case Cell.CELL_TYPE_NUMERIC:
                if (DateUtil.isCellDateFormatted(cell)) {
                    failuresCell.setCellValue(cell.getDateCellValue());
                } else {
                    failuresCell.setCellValue(cell.getNumericCellValue());
                }
                break;
            case Cell.CELL_TYPE_BOOLEAN:
                failuresCell.setCellValue(cell.getBooleanCellValue());
                break;
            case Cell.CELL_TYPE_FORMULA:
                failuresCell.setCellValuec(cell.getCellFormula());
                break;
            default:
                // some code
        }

セルの数値が 9200278 の場合、1717 として出力されます。どこが間違っているのかわかりません。この場合、私を助けてください。

4

2 に答える 2

2

これは、値ではなくセルを取得しているためです。の代わりに次の方法を使用できますrow.getCell(int).toString()

row.getCell(int).getStringCellValue();
row.getCell(int).getNumericCellValue();
and etc.

メソッドを呼び出す前に、セルのタイプを確認してください。次に例を示します。

if (cellType == HSSFCell.CELL_TYPE_BOOLEAN) {
    row.getCell(int).getBooleanCellValue();
} else if (cellType == HSSFCell.CELL_TYPE_ERROR) {
    row.getCell(int).getErrorCellValue();
} else if (cellType == HSSFCell.CELL_TYPE_FORMULA) {
    row.getCell(int).getCellFormula();
} else if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {
    row.getCell(int).getNumericCellValue();
} else if (cellType == HSSFCell.CELL_TYPE_STRING) {
    row.getCell(int).getStringCellValue();
}
于 2013-05-23T08:51:27.447 に答える
1

事前にすべてを文字列に設定しました。

try {
        FileInputStream fileInputStream = new FileInputStream(excelTemplate);
        HSSFWorkbook workbook = new HSSFWorkbook(fileInputStream);
        for (int i=0; i < workbook.getNumberOfSheets(); i++) {
            for (Row row : workbook.getSheetAt(i)) {
                for (Cell cell : row) {
                    if (cell != null)
                        cell.setCellType(Cell.CELL_TYPE_STRING);
                }
            }
        }

    } catch (IOException e) {
        e.printStackTrace();
    }
于 2015-05-14T20:00:07.350 に答える