Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Excelで取得した日付、時間(シリアル値)を判断したい

Excelで取得した日付、時間はシリアル値となるため、
Double型での取得になります。
これを日付または時間と判断し、元の入力された情報を文
字列とする。という処理をしたいのですが、まったくうま
くできません。

cell = row.getCell(col);
int type = cell.getCellType();
if (type == cell.CELL_TYPE_NUMERIC){
    if (DateUtil.isCellDateFormatted(cell)) {
        double value = 
cell.getNumericCellValue();
        java.util.Date date; 
        date = DateUtil.getJavaDate(value);
        cellValue = String.valueOf(date);
    }
}

以下のようにすると
2012/11/15 ⇒ OK
2014年3月9日 ⇒ NG
日付のみ ⇒ NG
時間のみ ⇒ △

またdateの取得方法とそれをStringに変換する方法も
なかなかうまくできないので、ヒントください。
初心者です...よろしくお願いします。
 

7

回答

98860

閲覧

7件の回答

評価

0

初心者だと言うなら、初歩から勉強したらどうか。
POIだと思うが、そういうものは早いんじゃないのか。

評価

0

ごめんなさい。
まるなげしているつもりではなく、私も勉強しながら試行錯
誤をしながらやっております。
JAVAは初心者ですが、ほかプログラミング経験者です。
POIでエクセルデータ取得するところまでできております。

よろしくお願いします。

評価

0

他の言語をやっているなら、初心者なんて言う必要はないだ
ろう。大抵の言語で考えることは一緒だし、うまく行かない
ときの対処も一緒だ。
簡単に言えば、デバッグはしたのかと。

評価

0

そうですね、失礼しました。

getCellした後ではシリアル値になっているので、この関
数使用後にどうにかして日付か時刻を判断できないかと考
えています。
同じシリアル値でもデバックの結果
isCellDateFormattedの関数は2012/11/15しか日付である
と判断してくれず、他の2014年3月9日などは
isCellDateFormattedの結果Falseになるためこの方法では
エクセルからとってきた日付時刻データをもう一度String
にするのは結構きびしいかなと思っています。

ちなみに今回入力されているエクセルのデータが数値か日
付か時刻かわからない状況です。もし確実に日付または時
刻であるデータであれば上記のように困らず、シリアル値
から日付を計算するように自分で関数作ります。

評価

0

POIのAPI documentを眺めただけの人です。

DateUtilにはisCellDateFormattedと似たような機能に思
えるものが並んでますけどもこういったメソッドで目的に
かないそうなものはないのだろうかと思いました。

うまい方法がなかった場合、書式文字列を取り出してDate
かどうか判断するのもできそうな気はします。書式はセル
単位に紐付くものということで、CellオブジェクトのAPI
を眺めたところCellStyleから取り出せそうな気がしまし
た。もっとも書式文字列を自分で解析するのはあまりに迂
遠なのであくまで最後の手段なのでしょうが。

ちなみに、Dateだということがわかったとして、Excel上
での書式に合わせてフォーマットしてくれるようなクラス
がないのかなとも思いました。formatに関係しそうな名前
のクラスがいくつかあるようでしたので。

単なる推測だけのコメントで申し訳ないです。

評価

0

POIに過大な期待はしない方がいいと思ってる。
Stringで取って正規表現で自分で調べる方が、結局は融通が効
くだろう。
SimpleDateFormatの配列を、parseできるまで回してもいい
が。

評価

0

結局は判断がむずかしいことを無理にやろうとしているの
で、Excelを読み込む前にExcel本体で文字列として扱う
のが一番よさそうです。
内部でなんとかできないものかと思い色々と試行錯誤してい
ました。

解答ありがとうございました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。