- PR -

【java】PoiでExcelに[9:00]のような時刻を入れたい

投稿者投稿内容
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-21 10:44
JavaにもPOIにも詳しくなくてすみませんが、
「シリアルになってしまう」とはどういう状況なのかわからないので教えてください。

"2007/1/3 9:00:00" を"h:mm"という書式で表示させようとした場合に、
9:00と表示されず、39085.375のような値で表示されてしまうのでしょうか?
9:00と表示されるが、実際に格納されている値は39085.375だということでしょうか?

前者の場合でしたら私にはわかりませんが、
もし後者の状況であれば、Excelがそういうものだからです、と言うことができます。
rrwwqq
会議室デビュー日: 2008/03/19
投稿数: 8
投稿日時: 2008-03-21 10:58
rainさん

>9:00と表示されるが、実際に格納されている値は39085.375だということでしょうか?
⇒こういう状態でした。

>もし後者の状況であれば、Excelがそういうものだからです、と言うことができます。
⇒Javaでできないのでしょうか。
キナサイ
会議室デビュー日: 2007/07/13
投稿数: 6
お住まい・勤務地: 神奈川・東京
投稿日時: 2008-03-21 11:12
Excelのセルには、ValueとTextのプロパティがあります。
Textプロパティは、セルの書式-表示形式やセルの幅によってその内容が変わり得ます。

日付や時刻の場合、セルのValueプロパティにはシリアル値が格納されますが、どういう表示になるかはTextプロパティで確認するか、実際にExcelで当該ワークシートを閲覧して確認します。
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-21 11:21
引用:

rrwwqqさんの書き込み (2008-03-21 10:58) より:

⇒Javaでできないのでしょうか。


いくつかの方法やヒントは既に私以外の人が挙げられていますので、
rrwwqqさんは、その中から選択して実行することができます。

シリアル値で格納されていることが原因で、何か困ることがあるのだと思いますが、
その内容をrrwwqqさんから教えていただければ、もっとよい方法を提案できるかもしれません。

rrwwqq
会議室デビュー日: 2008/03/19
投稿数: 8
投稿日時: 2008-03-21 11:47
引用:

rainさんの書き込み (2008-03-21 11:21) より:

シリアル値で格納されていることが原因で、何か困ることがあるのだと思いますが、
その内容をrrwwqqさんから教えていただければ、もっとよい方法を提案できるかもしれません。




rainさん

ご返事を頂、ありがとうございます。

今困っているのが、目標セルに「9:00」のような値が別セルの計算式の引数として扱われています。しかも、多数のセルが結合計算を行うため、計算式の意味がわかりにくい状態です。だから、セルの書式を変更せず、「9:00」のような値を入れたいと思って...

何か提案がありましたら、ご教授をいただけると、幸せです。
よろしくお願いします。

rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-21 13:08
引用:

rrwwqqさんの書き込み (2008-03-21 11:47) より:

今困っているのが、目標セルに「9:00」のような値が別セルの計算式の引数として扱われています。しかも、多数のセルが結合計算を行うため、計算式の意味がわかりにくい状態です。だから、セルの書式を変更せず、「9:00」のような値を入れたいと思って...



申し訳ないことに、rrwwqqさんの説明からはシリアル値であることが問題となっているようには思えませんでした。

rrwwqqさんは最初の質問で「2007/1/3 09:00:00」という時刻を扱っていましたが、その複雑な計算式で必要としている値は、「2007/1/3 09:00:00」という日付まで含めた値と、「9:00」という時刻だけの値のどちらでしょうか。

「2007/1/3 09:00:00」が必要なのであれば、それをセル上で「9:00」と表示するには「h:mm」という書式を指定することになるでしょう。

「9:00」が必要なのであれば、セルに値を設定する前に「2007/1/3」という日付部分を削るか、Excel上の計算式を直して、時刻部分だけを取り出して計算するよう修正することになるでしょう。(計算式を直す方法は現実的ではないと思いますが)
rrwwqq
会議室デビュー日: 2008/03/19
投稿数: 8
投稿日時: 2008-03-21 13:28
引用:

rainさんの書き込み (2008-03-21 13:08) より:

rrwwqqさんは最初の質問で「2007/1/3 09:00:00」という時刻を扱っていましたが、その複雑な計算式で必要としている値は、「2007/1/3 09:00:00」という日付まで含めた値と、「9:00」という時刻だけの値のどちらでしょうか。




rainさん

日本語の問題で誤解されて、申し訳ない。

複雑の計算式で必要としている値は「9:00」という時刻だけです。「2007/1/3 09:00:00」に関係がありません。


引用:


「2007/1/3 09:00:00」が必要なのであれば、それをセル上で「9:00」と表示するには「h:mm」という書式を指定することになるでしょう。




すでに、検証しました。日付「2007/1/3 9:00」をセルに入れて、書式を「h:mm」に指定したとたんに、セル値がシリアル値になってしまう。


引用:


「9:00」が必要なのであれば、セルに値を設定する前に「2007/1/3」という日付部分を削るか、Excel上の計算式を直して、時刻部分だけを取り出して計算するよう修正することになるでしょう。(計算式を直す方法は現実的ではないと思いますが)




今までは、直せないのですが、これから計算式を調べて、直してみる。
rainさん、ありがとうございました。

後、一つ問題が残っていますが、JAVAで本当にできないのでしょうか、「9:00」をセルに入れるのが...
rain
ぬし
会議室デビュー日: 2006/10/19
投稿数: 549
投稿日時: 2008-03-21 14:03
引用:

rrwwqqさんの書き込み (2008-03-21 13:28) より:

後、一つ問題が残っていますが、JAVAで本当にできないのでしょうか、「9:00」をセルに入れるのが...



こちら (In English) にありますように、日付や時刻をシリアル値で持つのはExcelの仕様です。
Excel上で時刻として計算しようとする限り、その仕様に従わなくてはなりません。

Excelには日付や時刻とシリアル値を相互変換する関数がありますので、セルの"@"という書式を指定して "9:00" という値を置いたとしても、"'9:00" という文字列を置いたとしても、そこから "0.375" というシリアル値を取り出して(TIMEVALUE関数)日付/時刻計算に使うことはできます。
しかし、それはrrwwqqさんが望むものではないでしょう。

スキルアップ/キャリアアップ(JOB@IT)