- PR -

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

投稿者投稿内容
rrwwqq
会議室デビュー日: 2008/03/19
投稿数: 8
投稿日時: 2008-03-19 14:35
はじめまして。
JAVA初心者です。

PoiでExcelに[9:00]のような時刻を入れたいですが、どうすれば良いのか教えていただけますか?

今のところの問題は、DBから取得されたStringデータ「2007-1-3 09:00:00.0」を「2007/1/3 09:00:00」に変更し
Dateタイプに変換してセルに入れます。下記の方法を使いました。

//String to Date
Date Datetemp = DateFormat.getDateTimeInstance().parse(”2007/1/3 09:00:00”);

//Create Style
HSSFCellStyle cellStyle = workBook.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); ★1

//Insert
Cell.setCellValue(datetemp);
Cell.setCellStyle(cellStyle);

が、できた結果は「2007/1/3 9:00」となりました。もし、★1のところを「h:mm」に変更したら、セル値がシリアル()になってしまう。他に、直接Stringタイプとして、セルに入れたら、セル値にアポストロフィが付いてしまう。
今のところ、解決方法がありません。

どうすれば、「9:00」が表示されるのですか?教えていただけますか。
未記入
会議室デビュー日: 2007/09/11
投稿数: 9
投稿日時: 2008-03-19 18:18
方法として
・文字列として出力する。
・元のExcel書式を変更する。
・プログラムから書式を設定してあげる。
  HSSFCellStyle#setDataFormatのメソッドを使用
  引数はbook.createDataFormat().getFormat("HH:mm")
の3つですかね。
jama
常連さん
会議室デビュー日: 2006/09/12
投稿数: 45
投稿日時: 2008-03-19 22:48
POIで書式を設定するのは難しいので、元のExcelに書式を設定する方法がやり易い。
動的に書式を設定する必要がある場合は、他のセルへ目的の書式を設定しておいて、
書式だけコピーする方法でやってみては。
jama
常連さん
会議室デビュー日: 2006/09/12
投稿数: 45
投稿日時: 2008-03-19 22:48
POIで書式を設定するのは難しいので、元のExcelに書式を設定する方法がやり易い。
動的に書式を設定する必要がある場合は、他のセルへ目的の書式を設定しておいて、
書式だけコピーする方法でやってみては。
rrwwqq
会議室デビュー日: 2008/03/19
投稿数: 8
投稿日時: 2008-03-21 09:34
jamaさん

ご回答、ありがとうございます。

>POIで書式を設定するのは難しいので、元のExcelに書式を設定する方法がやり易い
⇒やり易いといわれても、今の問題としては、どうすれば、「9:00」として格納し、
「9:00」が正しく表示されるってことですので、何か解決法とか、参照できるものとか
ありましたら、教えてもらいますか。よろしくお願いします。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2008-03-21 09:50
エクセルシートをダイナミックに作成されているのでしょうか?

jamaさんがいわれてるのは、私が今までつくったPOIを使用したプログラムも全て
そうなんですが、作成済みのエクセルファイルがあって、そこには罫線やフォーマットなどの書式は設定すみでデータだけ追加すればいい状態になっています。
そのシート上にデータだけ貼り付けたり、必要に応じて既存のシートの作成部分をコピして(書式が欲しいので)作成範囲を拡張したりしてるのです。

ダイナミックにシートを生成してるなら、

1)未記入が書かれてル、ダイナミックに書式設定する。
この方法はなかなか困難なので、
2)ダミーでもいいので書式設定したシート(エクセルファイル)をつくっておいて、
  そこからコピーして、そこに値を設定する。

すればよいのではということです。


rrwwqq
会議室デビュー日: 2008/03/19
投稿数: 8
投稿日時: 2008-03-21 09:50
補足します

jamaさん、あなたが言われた方法で、何回でもやって見ましたが、解決しかねます。

目標の書式の情報:
書式:時刻
書式コード:H:MM
外枠:上下左右あり
英数字用フォントの種類:MS P明朝 →言語:英語

今のやり方は、どこかで目標書式を設定しておいて、書式だけコピーする方法(ご提示の通り)、ソースはこちら:

//入力セル指定

HSSFRow Row = newSheet.getRow(0);
HSSFCell Cell = newRow.getCell((short) 1);

//目標書式のセルを指定する
HSSFRow newRow = newSheet.getRow(1);
HSSFCell newCell = newRow.getCell((short) 1);

//値を入れる
Cell.setCellValue(datetemp);//datetemp:TIMEタイプ ★1

//書式をコピーする
Cell.setCellStyle(newCell.getCellStyle);

でも、できた結果はセル値がシリアルになってしまう。ご提示の方法が問題ないともういますが、このソースでどこかいけないのでしょうか。
ご教授のほど、よろしくお願いします。


rrwwqq
会議室デビュー日: 2008/03/19
投稿数: 8
投稿日時: 2008-03-21 10:01
progmanさん

明快な回答を頂、ありがとうございます。

いまのやり方はprogmanさんがいわれた「2」です。

@ファイルフォーマットをサーバー側へ置いておく
Aサーバー側でそのファイルの必要な箇所にデータを書き込む
B作成したファイルをクライアント側へOutPutStreamする

この順です。書式のやり方はすでに上に説明しています。
でも、結果が出てこないのです(シリアルになるため)。何かいけないのでしょうか。
教えてもらいますか、よろしくお願いします。

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