- - PR -
【java】PoiでExcelに[9:00]のような時刻を入れたい
1|2|3
次のページへ»
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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」が表示されるのですか?教えていただけますか。 |
|
投稿日時: 2008-03-19 18:18
方法として
・文字列として出力する。 ・元のExcel書式を変更する。 ・プログラムから書式を設定してあげる。 HSSFCellStyle#setDataFormatのメソッドを使用 引数はbook.createDataFormat().getFormat("HH:mm") の3つですかね。 |
|
投稿日時: 2008-03-19 22:48
POIで書式を設定するのは難しいので、元のExcelに書式を設定する方法がやり易い。
動的に書式を設定する必要がある場合は、他のセルへ目的の書式を設定しておいて、 書式だけコピーする方法でやってみては。 |
|
投稿日時: 2008-03-19 22:48
POIで書式を設定するのは難しいので、元のExcelに書式を設定する方法がやり易い。
動的に書式を設定する必要がある場合は、他のセルへ目的の書式を設定しておいて、 書式だけコピーする方法でやってみては。 |
|
投稿日時: 2008-03-21 09:34
jamaさん
ご回答、ありがとうございます。 >POIで書式を設定するのは難しいので、元のExcelに書式を設定する方法がやり易い ⇒やり易いといわれても、今の問題としては、どうすれば、「9:00」として格納し、 「9:00」が正しく表示されるってことですので、何か解決法とか、参照できるものとか ありましたら、教えてもらいますか。よろしくお願いします。 |
|
投稿日時: 2008-03-21 09:50
エクセルシートをダイナミックに作成されているのでしょうか?
jamaさんがいわれてるのは、私が今までつくったPOIを使用したプログラムも全て そうなんですが、作成済みのエクセルファイルがあって、そこには罫線やフォーマットなどの書式は設定すみでデータだけ追加すればいい状態になっています。 そのシート上にデータだけ貼り付けたり、必要に応じて既存のシートの作成部分をコピして(書式が欲しいので)作成範囲を拡張したりしてるのです。 ダイナミックにシートを生成してるなら、 1)未記入が書かれてル、ダイナミックに書式設定する。 この方法はなかなか困難なので、 2)ダミーでもいいので書式設定したシート(エクセルファイル)をつくっておいて、 そこからコピーして、そこに値を設定する。 すればよいのではということです。 |
|
投稿日時: 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); でも、できた結果はセル値がシリアルになってしまう。ご提示の方法が問題ないともういますが、このソースでどこかいけないのでしょうか。 ご教授のほど、よろしくお願いします。 |
|
投稿日時: 2008-03-21 10:01
progmanさん
明快な回答を頂、ありがとうございます。 いまのやり方はprogmanさんがいわれた「2」です。 @ファイルフォーマットをサーバー側へ置いておく Aサーバー側でそのファイルの必要な箇所にデータを書き込む B作成したファイルをクライアント側へOutPutStreamする この順です。書式のやり方はすでに上に説明しています。 でも、結果が出てこないのです(シリアルになるため)。何かいけないのでしょうか。 教えてもらいますか、よろしくお願いします。 |
1|2|3
次のページへ»