- ベストアンサー
Excelのセルから日付情報を取得する方法について
- JavaでExcelのセルから日付情報を正しく取得する方法を教えてください
- Excelのセルから取得した日付情報が数字に変化してしまう問題があります
- データベースに登録するために、日付情報をString型に変換してから加工したいです
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>H23.6.30 と入力しているということは、セルの分類は「日付」にはなっていませんよね。 すみませんでした。 bin-chanさんのおっしゃるようにシリアル値は特定の日付からの経過日数を表しますので、 //windowsでのデフォルトでは1900/1/1 12:00:00AMから //上記時刻を表すCalendarクラスのインスタンス Calendar cal = Calendar.getInstance(); cal.set(1900, 0, 1, 12, 0, 0); //1900/1/1のシリアルが1なので、加算する値は取得した値 - 1になる int serial = Integer.parseInt(cellStr) - 1; //1900/2/29は存在しないがエクセル内では存在しているらしいので //その日付以降であればさらに -1 serial -= (serial > 60 ? 1 : 0); //基準日に加算 cal.add(Calendar.DATE, serial); //確認のために表示 System.out.println(String.format("%1$tD",cal)); という感じで計算はできると思います。 ただ、日付が入力されているセルが特定できていないとダメですが。 また、 >WindowsとMacで異なります。オプションで補正が可能。 というのは http://support.microsoft.com/kb/214094/ja などを参考に。
その他の回答 (2)
- yamada_g
- ベストアンサー率68% (258/374)
ava Excel APIは使ったことがないのですが、チュートリアルに日付セルの読み込み方があります。 http://www.andykhan.com/jexcelapi/tutorial.html#reading >if (c2.getType() == CellType.DATE) >{ > DateCell dc = (DateCell) c2; > datec2 = dc.getDate(); >} 日付セルであればDateCellにキャストしてDateオブジェクトを取得できるようです。 そのDateオブジェクトを文字列に変換すればいいのではないでしょうか。
補足
ご回答いただきありがとうございます。 ご紹介いただいたURLを参考にプログラムを修正し、getType()で説明文にあるExcelの各セルを取得したところ、バナナはLABEL、2はNUMBER、H23.6.30はNUMBERと判定されました。 やはりH23.6.3に関しては、セルの中身がNo1の方にご指摘いただいた通り、シリアル値として取得されており、NUMBERの判定となったみたいです^^; 自身の知識不足で未だ解決できていませんが、今一歩のような気もしますので、もう一度他の手法はないか、一から検討してみます。 再度ですが、ありがとうございました。
- bin-chan
- ベストアンサー率33% (1403/4213)
EXCELは日付を「シリアル値」として持ってます。「ある基準日」からの通算日数です。 「ある基準日」のデフォルトはWindowsとMacで異なります。オプションで補正が可能。 そこらへんも調べておく必要がありますよ。
補足
ご回答ありがとうございます。 シリアル値も検索ワードに入れて、再度色々と調べていますが、未だ解決には至っていません。 しかし、5ケタの数字の謎が解けただけでも、かなり前進した気がします。 ありがとうございました。
お礼
2度もご回答いただきありがとうございます。 お教えいただいた「基準日に加算する方法」で上手くいきました!! 長い時間悩んでいたので、本当に助かりました。 本当にありがとうございましたm(_ _)m