Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

POIの機能について

はじめまして。
POIの機能について知っていたらでかまわないので教えてください。
いろいろなサイトを見ましたが、POIで作成したブック自体を出力しないでデータベースに格納したいのですが、
そういった事は可能でしょうか。どのサイトもそのまま出力しているので出力しないで一度DBに書き込みたいのです。

答えだけで構わないのでいただきたいです。
よろしくお願いします。

21

回答

10983

閲覧

21件の回答

評価

0

「ファイルに」出力を「○○に」出力に、変えればいいんでは?
Javaはそういったことが簡単にできる言語でしょう。

意味が分からないなら、POI以前にオブジェクト指向の基本を覚えるべきでしょう。

評価

0

$さん
回答ありがとうございます。

すみません具体的にはどのようにいれるのでしょうか。
OutputStream outStream = new BufferedOutputStream(new FileOutputStream("xxx.xls"));
hssfWorkbook.write(outStream);
でエクセルに出力できると思うのですが、
DBのカラムに出力するにはどのようにするのでしょうか。

一度ファイルに落としてから読み込んでDB
に書き込むのであればFileクラスをそのままBLOBで入れればできるような気がするのですが・・・。

直接書き込む方法がイメージができません。
よろしくお願いします。


評価

0

「ファイルに書き出してDBへBLOBで入れる」ができるなら、
「メモリに書き出してDBへBLOBで入れる」もできるでしょう。

OutputStreamはファイルだけ?

評価

0

$さん
>>「メモリに書き出してDBへBLOBで入れる」もできるでしょう。
というのはByteArrayOutputStreamを使用するということでしょうか?

すみません具体的なサンプルもしくはURL等あれば教えていただけないでしょうか。

理解できない部分は内部でexcelとしてできた物をどうやってメモリ上に保管するのか検討がつかないのです。

よろしくお願いします

評価

0

>というのはByteArrayOutputStreamを使用するということでしょうか?
思い当たることがあれば、やってみれば。
ByteArrayOutputStreamの使い方は、検索すれば出てくるでしょう。
FileOutputStreamの成果物がFileなら、ByteArrayOutputStreamの成果物はbyte[]。
どちらも抽象化すればOutputStream。
ではFileからDBへ入れるのに何を使って、byte[]では何を使えば?

抽象的に考えましょう。

>excelとしてできた物
それがExcelデータだと見なしているのは、人間だけです。
Javaやコンピュータにとっては単なるバイナリ列であって、形式は認知しません。

評価

0

そういえばつい先日も、POIとOutputStreamの質問が。

http://www.javaroad.jp/bbs/answer.jsp?q_id=20080219130032895

評価

0

$さん

情報ありがとうございます。
これからちょっと試してみます。

評価

0

確認できる環境が無いのですがソースを書いてみました。以下のようにすればうまくいきますでしょうか。
まだ先ですが環境ができて動いたらご報告します。
ありがとうございました。

ByteArrayOutputStream out = new ByteArrayOutputStream();
// エクセル出力
hssfWorkbook.write(out);
// バイト変換してDB格納
byte[] data = out.toByteArray();
=== DB格納→DB取得予定(省略) ====
// バイト配列でDB取得
byte[] getData = out.toByteArray();

response.setContentType("multipart/form-data");
ServletOutputStream retOut = response.getOutputStream();
int len;
while ((len = in.read(a, 0, 1024)) != -1) {
retOut.write(a, 0, len);
}

評価

0

このスレに関連してですが、
メモリ上に格納されたエクセルデータのファイル名を変更することって可能なのでしょうか。

テンプレートを読込んで値を設定。
それをリネームしてDBに書き込みたいのです。
シート名の変更などのメソッドはあったのですがファイル名自体を変更するやり方が調べても見当たらなかったのでもしやり方があるなら教えていただきたいです。

よろしくお願いします。

評価

0

メモリ上にあるExcelデータになぜ「ファイル」名が?

評価

0

$さん

いつも回答ありがとうございます。
ということはできないということでよろしいでしょうか。

では一度ファイルに書き出してからそれを読込んでDBに入れるしかないですね。

素朴な疑問ですがシート名が変更できてなぜファイル名が変更できないのかちょっとわからないです。
そういうものと覚えておけばいいですけど。。
ありがとうございました。

評価

0

先にファイル名変更してから
読み込めばいいのに。
全ての処理が終わったら
消しちゃえばいいし。

評価

0

?さん

ヒントありがとうございます。
FileのrenameToってメソッドですね。
ちょっと試してみます。
ありがとうございました。

評価

0

?さん

以下のことを実行したらうまくいきそうです。
// ファイル読込み
File file=new File("C:\\Templete.xls");
// ファイルを作成
file.createNewFile();
// ファイル名変更
file.renameTo(new File("sample.xls"));
こいつをinputStreamで読込んで値をいれてDB投入
でうまくいきそうです。

ご教授ありがとうございました。

評価

0

ん…。
InputStreamで読み込んだExcelデータに、ファイル名って入ってるの?

評価

0


昔、私が携わったプロジェクトでエクセルデータをDB登録して取り出すときには登録時のファイル名がついていたと思うので、メモリ上でリネームしてDBに入れれば取り出す時にはそのファイル名で取れるのかと・・・。
あいまいなので回答になりませんが。。
どなたか知っている人おしえてください。
よろしくお願いします。

評価

0

別カラムにファイル名を持っていただけでは…。
Bookを書き出すのにFileOutputStreamが必須なのだから、そのファイル名は別にどこかにあるんだと思うけど。

評価

0

FileOutputStream → (File)OutputStream

評価

0

失礼、キャストみたいですな…直さないほうが良かったか。

評価

0

$さんいろいろとありがとうございます。

私の方でも調べてみまして、やはりバイト出力しただけでは意図したファイル名はできないみたいです。
やりたいことはServletOutputStreamでそのまま出力したいのでresponse.setHeaderメソッドにファイル名を指定すればうまくいくらしいです。
また行き詰ったらご教授願います。
いろいろとありがとうございました。

評価

0

いつのまにか、ダウンロードの話になっていないですか?
DBに格納するのはできたのですか?

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。