0

編集:混乱を避けるために、元の質問の(再び)改良版を次に示します。

質問 書式設定のそれぞれのハードコーディングを知らずに (たとえば、セル独自の書式設定を使用して出力を書式設定するなど)、セルの文字列表現を Microsoft Excel が表示するのと同じように読み取るにはどうすればよいでしょうか。

これまでの回答 米国版の Excel を使用している場合、これは問題ありません。他のすべてのバージョンでは、Apache POI は、米国版の Excel が表示する方法と同等の文字列を返します。Apache には組み込みの方法はありませんこれを変更するPOI。「動作」していることを確認できる唯一の方法は、Gagravarr が提案したように、Mac の言語を US/EN に切り替えることです。その後、Apache POI と Excel は同じ結果を返します。これは一種の逆解です。

問題は次のとおりです。セルは01.12.13ドイツ語版の Excel のように表示されますが、日付としてフォーマットされているためです。

HSSFCell cell = (HSSFCell) cellIter.next();
HSSFDataFormatter formatter=new HSSFDataFormatter();
String val=formatter.formatCellValue(cell)

の値が得られます21/01/13


元の質問は次のとおりです。

Excelに表示される日付フィールドを含むxlsxファイルがあります

01.12.13セルの書式設定を使用するTT.MM.JJ

apache poi で同じファイルを読み取ると、セルとフォーマットが取得されます。

HSSFCell cell = (HSSFCell) cellIter.next();
HSSFDataFormatter formatter=new HSSFDataFormatter();
String val=formatter.formatCellValue(cell)

cellIterもちろん、有効なイテレータであり、単純化された例です)

私のことvalが判明しました21/01/13。私が理解しているように、HSFDataFormatter のメソッド formatCellValue() は、セルの書式設定で書式設定された値の文字列を返す必要があります。

val に Excel と同じ形式を含める方法を知っている人はいますか?

どんな助けにも感謝します!ありがとうございました!

4

1 に答える 1

1

次のように日付形式をカスタマイズできます。

HSSFCell cell = (HSSFCell) cellIter.next();
SimpleDateFormat DtFormat = new SimpleDateFormat("dd.MM.YY");
Date date=cell.getDateCellValue();
System.out.println(DtFormat.format(date).toString());

これにより、値が 21.01.13 として出力されます。

于 2013-08-26T08:50:01.223 に答える