複数シートのExcelテンプレートファイルにて、出力するシートを指定できるかどうか?

1,242 views
Skip to first unread message

seki

unread,
Aug 2, 2010, 4:05:44 AM8/2/10
to excella
関と申します。いつもお世話になっております。

1つ前に質問された方の内容と似ていますが、複数シートのExcelテンプレートファイルの仕様
について、お尋ねしたいことがあります。

現在、月次報告用の帳票を作成していて、
・帳票一式をまとめて出力(1つのExcelファイルで複数シート)
・帳票毎に個別に出力(1つのExcelファイルで1シート)
の2パターンの機能を実装する方向で進めています。

それで、テンプレートの二重メンテを避ける為、1つのテンプレートで出力するシートを
選択できるかどうか試しています。

まず、テンプレート内の全てのシートを出力するのは勿論問題なくできました。
しかし、シートを1つだけ指定(出力したいシートだけaddReportSheetで追加)した場合は、
破損したExcelファイルが出力されてしまうようです。

上記のように複数シートのExcelテンプレートファイルにて、出力するシートを指定して
Excelファイルを出力することが可能かどうか教えていただけないでしょうか?
(難しいようでしたら、一括出力用と個別出力用でExcelテンプレートファイルを分けるようにします。
帳票の変更が発生したらシートをコピーすれば良いだけですので、それ程手間ではないです。)

以上、宜しくお願い致します。

横井@bbreak

unread,
Aug 2, 2010, 4:27:22 AM8/2/10
to excella
関さん

横井です。

出力シートの指定ですが、良くやる方法でもあり、関さんのやっている方法で上手くいくはずですね。
たとえば、送付状、注文書、注文請書の3シートを1テンプレートファイルで用意しておき、下記のように注文書
の部分をコメントアウトすると、送付状と注文請書が出力されるといったイメージになります。


// 送付状のデータ設定
ReportSheet sendReportSheet = new ReportSheet( "送付状");
reportBook.addReportSheet( sendReportSheet);

// 注文書のデータ設定
// ReportSheet orderReportSheet = new ReportSheet( "注文書");
// reportBook.addReportSheet( orderReportSheet);

// 注文請書のデータ設定
ReportSheet orderReceiptReportSheet = new ReportSheet( "注文請書");
reportBook.addReportSheet( orderReceiptReportSheet);


なので、何か他に破損してしまう理由があるのではないかと思います。
他のシートを参照していたりとか、出力するシートによって処理が違う部分があれば
その辺が怪しいですかね。

以上、よろしくお願いします。

seki

unread,
Aug 3, 2010, 4:20:05 AM8/3/10
to excella
関です。

ある程度原因が分かってきましたので、ここまでで一度お伝えします。
どうも、Excelテンプレートファイルのシート名やその順番によっては破損することがあるようです。

例えば、テンプレートファイルの中に「Digest」「Deferred」「Received」という3つのシートがあり、
そのうちDigestだけを出力しようとします。

ReportSheet reportSheet = new ReportSheet("Digest");
reportBook.addReportSheet(reportSheet);

その際、Excelのシートの順番によっては破損したファイルが出力されてしまいました。
以下、そのパターンの例です。
・Digest/Deferred/Receivedの順 ⇒ NG(破損)
・Received/Digest/Deferredの順 ⇒ NG(破損)
・Deferred/Received/Digestの順 ⇒ OK

推測なのですが、ReportProcessorクラス等のソースを見ますと、ArrayListやHashSetなどでシート名を保持して、
出力対象のチェックなどを行っているように見受けられます。
それらのうち、どこかでシートの順番に影響する箇所があるのかもしれません。

今のところ調べられたのはここまでですが、上記の内容について確認していただけないでしょうか?

【補足】
・Sheet1,Sheet2,Sheet3など、シンプルなシート名ならば、どの順番でシートが並んでいても大丈夫なようでした。
・出力しなかったシートに名前が含まれていますと、Excelファイルの作成はできるのですがファイルを開いた時に
 「1 つ以上の無効な名前が削除されました。」とエラーが表示されます。これはおそらく回避できないと思います。
 ただ、印刷範囲やタイトルなどを設定するとPrint_Areaなどの名前が自動で定義されるので、結局のところ印刷範囲等の
 設定が必要な帳票についてはテンプレートファイルを分けることになりそうです。

以上、宜しくお願い致します。
Reply all
Reply to author
Forward
0 new messages