- - PR -
POIでエクセルの書き込み
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-07-19 00:13
有償で構わないので、MicrosoftがExcelを扱うライブラリを
販売してくれれば多くのユーザ要望を叶えられるのですが。 Excelファイルを生成するソリューションってのは 需要が多いでしょうに、提供できない理由があるのですかね? しかし…。 ユーザさんはExcel好きだよなぁ…。 | ||||||||
|
投稿日時: 2006-07-19 09:09
断っておきますが、私は元々長らくSierや個人事業主として、 システム開発に携わってきて、情報システム部で社内SEになってから、 やっと1年ちょっとたったところです。 ですから、オープンソースであろうと、大抵の物は修正出来るのです。 実際、プログラムを作ることはあります。 でも、私自身、社内の技術レベルを上げるために採用された人間なので、 社内には私以外、古い方々しかいないのですよ。 私が社内SEになったのは、将来的には、SEから足を洗いたいので、 他の方では対応出来なシステムを残しておくことは出来ないのです。 | ||||||||
|
投稿日時: 2006-07-19 10:36
つ http://support.microsoft.com/kb/257757/ja/ | ||||||||
|
投稿日時: 2006-07-19 14:06
http://issues.apache.org/bugzilla/show_bug.cgi?id=36956
これ見てみましたが、POIをハックしろってことでしょうね。 多分org.apache.poi.hssf.model.Sheetのどこかを修正しろって ことだと思いますが、行番号がないのでちょっと追えませんね… 代わりに、小手先ですが、こんな解決法はどうでしょうか? 既存のワークシートのあらかじめ決められた位置に改ページを 設定しておくのです。 で、POIを使った処理の中で、改ページを挿入した後で、 余分な改ページを削除します。 手元の環境で試したところ、うまくいくことを確認しました。 ユーザが作成するワークシートに所定のひな形があり、 そのひな形をシステムが提供する運用をとるのであれば、 この方法でいけそうな気がします。 後は、ユーザがひな形ファイルを開くと変な位置に改行があることが (最終的には削除されるとしても)許されるかどうかが問題ですが。 ちなみにこのPOIですが、私が使った範囲では 大きなワークブックを開いたり作成したりするとOutOfMemoryErrorを 起こしたり、セルの値を取得したら末尾に謎の空白があったりと、 いろいろと怪しいことが起こりました。 なので、品質についてはあまり信用していないのですが、 検証して適用可能な範囲を絞れば十分使えると思っています。 実際にPOI使ったシステムを顧客に納めたことがあるんですが、 そのときにはそうやって確認してました。 というかこの手の検証って、商用製品を使う時でも当然しますよね? POI以外のライブラリとなると、商用製品だとXLsoftの 「Formula One e.Spreadsheet Engine」というのがあるようですね。 http://www.xlsoft.com/jp/products/RE/products/f1ese.html 使ったことはないですが。 オープンソースのものだと、JExcelAPIと言うのがあるようです。 http://jexcelapi.sourceforge.net/ が、個人的にはクラス構成が微妙な感じです。 改ページ挿入機能はあるので、試してみてもいいかもしれません。 | ||||||||
|
投稿日時: 2006-07-20 15:39
みなさん、レスありがとうございます。
>http://issues.apache.org/bugzilla/show_bug.cgi?id=36956 >これ見てみましたが、POIをハックしろってことでしょうね。 package org.apache.poi.hssf.modelのSheet.java 280行目あたり をさしてますが、なにをどう直せばというのはさっぱりわかりません。 行削除はやったのですが、セルの結合情報が残ってしまい。それによってか 印刷対象になったり、ファイルが巨大になったりという不都合があり採用は 見送っています。 >http://www.xlsoft.com/jp/products/RE/products/f1ese.html これって、この掲示板の左下にCMリンクがありますよね、そんなに詳しく見た わけではありませんが、今回の用途に”使える”という感触はありません。 ダウンロードして評価などしたわけではないので、使えるかもしれません。 >http://jexcelapi.sourceforge.net/ ネットで評判などをあさっているところです。 >有償で構わないので、MicrosoftがExcelを扱うライブラリを >販売してくれれば多くのユーザ要望を叶えられるのですが。 >つ http://support.microsoft.com/kb/257757/ja/ dodoさんの意図はちょっとわかりませんが、 サーバーサイド オートメーションなるものを使いましょう。 ということでしょうか? Microsoftがjavaに特化したツールを提供するというのも考えづらいですが、 javaからオートメーション機能を使うという方法で悩むことにもなるとおもいます。 私のPjで今はjavaによる方法も検討していますが、オートメーションとなるかどうか はわかりませんがMS系ツール(VB)との連携を検討しています。 | ||||||||
|
投稿日時: 2006-07-20 19:02
ゴミレスで恐縮ですが。
Bug 36956 - NullPointerException trying to place a page break http://issues.apache.org/bugzilla/show_bug.cgi?id=36956 のComment #1は、(2006-01-13時点で)既にこういうコードが入ってるから修正されてるようだよ、という勘違いコメントじゃないでしょうか。このコードは既存シートがRowBreakを含んでいる場合にのみ有効で、そうでなければ(rowBreaksがnullのままなので)NPEが発生することになります。 もし修正するとしたら、Sheet#setRowBreakを if (rowBreaks == null) { rowBreaks = new PageBreakRecord(PageBreakRecord.HORIZONTAL_SID); records.add(getDimsLoc() + 1, rowBreaks); } rowBreaks.addBreak((short) row, fromCol, toCol); にすれば、一応(場当たり的に)回避はできるようです。 (なお私はPOIユーザではありませんし、POIを使うべきだとも思っていませんので念のため^^;) | ||||||||
|
投稿日時: 2006-07-20 19:34
サーバサイドでExcelを実行するのは推奨も保障もされていませんし、 接続ユーザー数分ライセンスが必要なので、大変だと思います。。。 (直接Excelファイルのバイナリを操作するライブラリでない限り、 たいてい内部的にExcelが起動します。) | ||||||||
|
投稿日時: 2006-07-21 11:33
レスありがとうございます。
修正の件はとりあえずやってみたいとおもいます。 ですがFEさんもPOIにネガティブな印象をもたれてるようですね。 サーバサイドでのMS系での処理は私が直接担当してるわけではないですが、 エクセルがインストールされてないとできないのではないかという話になっていて 接続台数分必要ということなら見送りとなるでしょうね。 これでPOIは先のバグ以外にも懸念はあり、検証が必要であると考えています。 手詰まりで他の手段を考えるということになってくるのかな? サーバサイドでエクセルファイルを作成してダウンロードって、よくある話で 私自身もこれで3件目なんですが 1件目 Perlで作成、Spreadsheetですが最近どうなんでしょう? PerlもSpreadsheetもすっかり忘れてしまいましたが 2件目 CSVでダウンロードして、クライアント側で処理という形態にしました。 みなさん、どういう方法をとられているのでしょう? |