- PR -

POIでエクセルの書き込み

投稿者投稿内容
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-07-19 00:13
有償で構わないので、MicrosoftがExcelを扱うライブラリを
販売してくれれば多くのユーザ要望を叶えられるのですが。

Excelファイルを生成するソリューションってのは
需要が多いでしょうに、提供できない理由があるのですかね?

しかし…。
ユーザさんはExcel好きだよなぁ…。
taku
ぬし
会議室デビュー日: 2002/11/12
投稿数: 918
お住まい・勤務地: 墨田区→中野区
投稿日時: 2006-07-19 09:09
引用:

flatlineさんの書き込み (2006-07-18 18:35) より:
引用:

 オープンソースであろうと、自分でソースを修正する選択肢は、
企業の情報システム部にはまず無いのですよ。
それがあると仰るのは、Sierにしか在籍したことがない技術者です。



 私は、SIer 出身で現在は(SIerではない)企業の情報システム部にいます。
で、自分でソースを修正する選択肢があります(開発部門なので)。
なので、taku さんとは少し立場が異なるかもしれませんね。


 断っておきますが、私は元々長らくSierや個人事業主として、
システム開発に携わってきて、情報システム部で社内SEになってから、
やっと1年ちょっとたったところです。
ですから、オープンソースであろうと、大抵の物は修正出来るのです。
実際、プログラムを作ることはあります。
でも、私自身、社内の技術レベルを上げるために採用された人間なので、
社内には私以外、古い方々しかいないのですよ。
私が社内SEになったのは、将来的には、SEから足を洗いたいので、
他の方では対応出来なシステムを残しておくことは出来ないのです。
dodo
ベテラン
会議室デビュー日: 2004/05/12
投稿数: 99
お住まい・勤務地: 東京都渋谷区
投稿日時: 2006-07-19 10:36
引用:

nagiseさんの書き込み (2006-07-19 00:13) より:
有償で構わないので、MicrosoftがExcelを扱うライブラリを
販売してくれれば多くのユーザ要望を叶えられるのですが。

Excelファイルを生成するソリューションってのは
需要が多いでしょうに、提供できない理由があるのですかね?



http://support.microsoft.com/kb/257757/ja/
koe
大ベテラン
会議室デビュー日: 2003/07/13
投稿数: 198
投稿日時: 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/
が、個人的にはクラス構成が微妙な感じです。
改ページ挿入機能はあるので、試してみてもいいかもしれません。
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 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)との連携を検討しています。

FE
会議室デビュー日: 2002/05/24
投稿数: 9
投稿日時: 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を使うべきだとも思っていませんので念のため^^;)
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-07-20 19:34
引用:

progmanさんの書き込み (2006-07-20 15:39) より:
>つ http://support.microsoft.com/kb/257757/ja/
dodoさんの意図はちょっとわかりませんが、
サーバーサイド オートメーションなるものを使いましょう。
ということでしょうか?
Microsoftがjavaに特化したツールを提供するというのも考えづらいですが、
javaからオートメーション機能を使うという方法で悩むことにもなるとおもいます。

私のPjで今はjavaによる方法も検討していますが、オートメーションとなるかどうか
はわかりませんがMS系ツール(VB)との連携を検討しています。


サーバサイドでExcelを実行するのは推奨も保障もされていませんし、
接続ユーザー数分ライセンスが必要なので、大変だと思います。。。
(直接Excelファイルのバイナリを操作するライブラリでない限り、
たいてい内部的にExcelが起動します。)
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2006-07-21 11:33
レスありがとうございます。
修正の件はとりあえずやってみたいとおもいます。
ですがFEさんもPOIにネガティブな印象をもたれてるようですね。

サーバサイドでのMS系での処理は私が直接担当してるわけではないですが、
エクセルがインストールされてないとできないのではないかという話になっていて
接続台数分必要ということなら見送りとなるでしょうね。

これでPOIは先のバグ以外にも懸念はあり、検証が必要であると考えています。


手詰まりで他の手段を考えるということになってくるのかな?
サーバサイドでエクセルファイルを作成してダウンロードって、よくある話で
私自身もこれで3件目なんですが
1件目 Perlで作成、Spreadsheetですが最近どうなんでしょう?
    PerlもSpreadsheetもすっかり忘れてしまいましたが
2件目 CSVでダウンロードして、クライアント側で処理という形態にしました。


みなさん、どういう方法をとられているのでしょう?

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