10

Excelファイルを読み取るためにapache poiライブラリを使用しています。パスワードセルの読み取り中にスタックしました。ユーザーがパスワードセルにパスワードとして日付を指定した場合、つまり 16/05/2012. この値を「41045」と読んでいますが、値は「16/05/2012」でなければなりません。これは私のコードです:

cell = row.getCell(); // date in the cell password '16/05/2012'
switch (cell.getCellType()) {

case HSSFCell.CELL_TYPE_STRING:
    cellValue = cell.getRichStringCellValue().getString();
    break;
case HSSFCell.CELL_TYPE_NUMERIC:
    if(cellCount == TEMPLATE_PASSWORD) {// if cell is password
        cell.setCellType(Cell.CELL_TYPE_STRING);
        cellValue = cell.getRichStringCellValue().getString(); // value read is 41045 and not "16/05/2012"
    }
    break;
default:
}

誰でもこれについて助けることができますか?

ありがとう。

4

3 に答える 3

18

POI で探しているクラスはDataFormatter です

Excel がファイルを書き込むとき、一部のセルはリテラル文字列として保存されますが、他のセルは数値 (日付を含む) として保存されます。後者の場合、セルを表す浮動小数点値がファイルに保存されるため、POI にセルの値を要求すると、それが実際に持っている値になります。

ただし、特にテキスト抽出を行う場合 (常にではありません)、セルの値を Excel のように表示したい場合があります。それを文字列で正確に取得できるとは限りません (たとえば、完全なスペース以外のパディング)。ただし、DataFormatter クラスを使用すると、それに近づくことができます。

また、Excel では、1900 年以降は日付が浮動小数点数として格納されることに注意してください。これが、日付ではなく数値が表示される理由です。DataFormatter (または同様のもの) を使用して、日付としてレンダリングします。

于 2012-05-16T20:55:29.067 に答える
11

以下のコードを使用して、Excel シートに入力した正確な日付形式を取得します。

DataFormatter df = new DataFormatter();
stringCellValue = df.formatCellValue(cell);
于 2013-11-28T07:43:04.153 に答える
5

セル値を ' でプレフィックスして xls に保存すると、文字列セルにレンダリングされます。そのため、そのセルから読み取ったものはすべて文字列として扱われ、そのまま読み取られます。

于 2012-05-16T11:07:35.547 に答える