• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excelに時刻を入れたい)

Excelに時刻を入れる方法と表示結果について

このQ&Aのポイント
  • JAVA初心者ですが、ExcelにDBから取得した時刻データを正しく表示する方法を教えてください。
  • Timeタイプとして入れるとセル値がシリアルになり、Stringとして入れるとアポストロフィが付いてしまいます。
  • また、エクセルの書式は「時刻」です。以下のソースコードを使用しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • aton
  • ベストアンサー率47% (160/334)
回答No.5

No.4です。 >>とありますが,ご質問は,「シリアル値になってしまう」ことを避けたいが,どうすればいいかということでしょうか? >⇒はい、「シリアル値になってしまう」ことを避けたいです。 No.4の回答にも書きましたが,時刻を(1日を1とする)シリアル値で管理するのはExcelの仕様です。 < http://office.microsoft.com/ja-jp/excel/HP052006741041.aspx > 試しにExcelを開き,手で「09:00」とセルに入力した後,そのセルの表示形式を"標準"に変更してみてください(ちなみに変更前の表示形式は"hh:mm"になっているはず)。おそらく「0.375」かそれに近い値になるはずです。 シリアル値以外で格納するとすると,文字列しかありません。しかし,RuuZZUさんは, > 他、Stringとしたら、セル値にアポストロフィが付いてしまう。 と書かれているので,文字列での格納もしたくないように思われます。 そうすると,結論としては,「シリアル値でもなく文字列でもなく格納することは不可能です」という回答にしかならないのですが,正直RuuZZUさんが「正しい」と考えている格納状態はどういうものなのでしょうか? 繰り返しになりますが,Excelには「時刻」をそのまま表す格納形式はありません。時刻として格納したい(加減乗除などを行いたい)場合はシリアル値,単に表示できればいい場合は文字列,のどちらかしかありません。いずれにせよこれはまずExcelでどうしたいかの問題であり,その答が得られない限りJavaでどうするということは答えられません。

参考URL:
http://office.microsoft.com/ja-jp/excel/HP052006741041.aspx
RuuZZU
質問者

お礼

atonさん ご回答、ありがとうございました。 Excelの書式の変更を行い、結果が出てきました。 問題は、すでに解決しました。 ありがとうございました。

その他の回答 (4)

  • aton
  • ベストアンサー率47% (160/334)
回答No.4

補足要求+回答です。 > DBからTimeタイプとして入れたら、セル値がシリアルになってしまう。 とありますが,ご質問は,「シリアル値になってしまう」ことを避けたいが,どうすればいいかということでしょうか? だとしたら,時刻をシリアル値として扱うのはExcelの仕様であり,Javaでどうこうできる問題ではありません。 それとも,シリアル値として格納されるのはOKだが,それがExcelにおいて(例えば)9:00を表す正しいシリアル値として格納したい時,どうすればいいかということでしょうか? それならば,java.sql.Time型は,1970年1月1日0時ちょうど(UTC)をエポックとするjava.util.Date型なので,これを1900年1月1日0時ちょうど(UTC)をエポックとするExcelの時刻表現に合わせる必要があります。 具体的には, 1) modifyTimeTempをミリ秒(long)に変換し, 2) そこから (1970年1月1日0時ちょうど(UTC) - 1900年1月1日0時ちょうど(UTC)) のミリ秒(私の計算では2208988800000L)を引き, 3) それを java.util.Date 型に変換したものを, 4) newCell1.setCellValue(java.util.Date)する という手順になると思います。 なお,modifyTimeTempに入っている時間がUTC以外なら,別途時差調整が必要になると思われます。 またMac版のExcelでは,1904年1月1日0時ちょうど(UTC)がエポックの場合もあるようなので< http://support.microsoft.com/kb/214330/ja >,Macではそちらの数値を使って調整する必要があるかもしれません。

参考URL:
http://support.microsoft.com/kb/214330/ja
RuuZZU
質問者

補足

atonさん ご回答、ありがとうございます。 日本語の問題で、ご迷惑をかけました、すみません。 >とありますが,ご質問は,「シリアル値になってしまう」ことを避けたいが,どうすればいいかということでしょうか? ⇒はい、「シリアル値になってしまう」ことを避けたいです。 >それとも,シリアル値として格納されるのはOKだが,それがExcelにおいて(例えば)9:00を表す正しいシリアル値として格納したい時,どうすればいいかということでしょうか? ⇒9:00を表す正しいシリアル値として格納したくありませんので、直接に言えば、JAVAでそうすればExcelに「9:00」として格納し、「9:00」が正しく表示されるってこと。 よろしくお願いします。

回答No.3

これでは、ダメでしょうか? 1.DBからの値を文字列で取得 2.エクセルのセルのタイプを設定 3.エクセルの値の設定 //DBからの値を設定 HSSFRichTextString hoge = new HSSFRichTextString("24:00"); //セルのタイプを文字列にする newCell1.setCellType(HSSFCell.CELL_TYPE_STRING); //値設定 newCell1.setCellValue(hoge);

RuuZZU
質問者

補足

namida6000さん ご回答ありがとうございます。 値設定のところにエラーが出てきました。下記の通り: 「The method setCellValue(double) in the type HSSFCell is not applicable for the arguments (HSSFRichTextString)」 まだ初心者なので、エラーの意味が分からなくって、恐れ入れますが、 何の意味でしょうか、それと、エラーを解決する方法がありますか。 よろしくお願いします。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.2

#1のURLでは時刻表示スタイルの設定を紹介しています。 フォーマットの部分を"h:mm"にすれば "9:00"と表示されるでしょう。 "h:mm"はビルドインフォーマットなのでサンプルのソースで問題ないと思います。 (未検証なので追試して下さい)

RuuZZU
質問者

補足

bgbgさん ご回答、ありがとうございます。 #1のURLの方法は、すでに検証しました。フォーマットの部分を"h:mm"に変換したら、見た目は確かに「9:00」に表示されましたが、 実のセル値はシリアル(955065:00:00)になってしまいました。 たびたび申し訳ないが、何か別の方法ではあるのでしょうか。 よろしくお願いします。

  • bgbg
  • ベストアンサー率53% (94/175)
回答No.1

HSSFで検索すれば一発で見つかりますが、 http://poi.terra-intl.com/hssf/quick-guide.html#CreateDateCells

RuuZZU
質問者

補足

ご回答、ありがとうございます。 が、セルに「09:00」だけを入れたいのです。他の日付は要りません。 何か役になるものがあるのですか?

関連するQ&A