例えば、テンプレートにシートが3つ
sheet1
sheet2
sheet3
があったとして、条件によって、出力ファイルには
sheet1
sheet2
とか
sheet1
sheet3
だけを出力するというのはできないのでしょうか。実際にやってみるとexcella自体の処理は
正常終了するのですが、Excelで開くと壊れたファイルだと言われます。(添付ファイルのoops.zip参照)
Excelだと壊れていると言われるのですが、OpenOfficeだとそれなりに開けてしまうところが
不思議です。
ReportBook book = new ReportBook(templateFilePath,
baseDir + baseName , ExcelExporter.FORMAT_TYPE);
List<ReportSheet> sheets = new ArrayList<ReportSheet>();
sheets.add(new ReportSheet("sheet1","sheet1"));
sheets.add(new ReportSheet("sheet2","sheet2"));
sheets.add(new ReportSheet("sheet3","sheet3"));
・・・
configBook.addReportSheets(sheets);
ReportProcessor reportProcessor = new ReportProcessor();
reportProcessor.process(book);
と、いった感じで実行していますが。
以上、よろしくお願いします
出力ファイルはReportSheetを作成したもののみを出力する仕様になっています。
テンプレートにシートが3つの場合、
(sheet1、sheet2、sheet3)
ReportSheetを2つ作成すると
(sheet1、sheet3)
出力ファイルは2つのシートになります。
(sheet1、sheet3)
ですので、条件によってReportSheetの作成有無で出力するシートを選択することが可能です。
シート名を変更すると、内部的にPOIを使用してclonesheetしているのですが、
すべての情報をコピーできていません。
そのためコピーできない情報があるテンプレートの場合、
Excelで開くと壊れたファイルを認識してしまいます。
OpenOfficeでそれなりに開くのは、完全互換ではないため
コピーできない情報を処理していないからだと思われます。
使用したテンプレートファイルをいただければ、
詳細な情報を提供できるかもしれません。
以上、よろしくお願いいたします。
ReportSheetを作成したシートのみを出力する仕様になっています。
テンプレートにシートが3つある場合に
(sheet1、sheet2、sheet3)
ReportSheetを2つ作成すると
(sheet1、sheet2)
出力Excelのシート数は2つになります。
(sheet1、sheet2)
ですので、ReportSheetの作成有無で出力するシートを選択することが可能です。
シート名を変更している場合、内部的にPOIでcloneSheetしているのですが、
すべてコピーできていません。
そのコピーされない情報をテンプレートに使用していると、
Excelで開くと壊れたファイルとされてしまいます。
OpenOfficeでそれなりに開くことができるのは、
Excel完全互換ではないため、コピーされない情報を読み取っていないから
だと思われます。
使用したテンプレートをいただければ、詳細な情報を提供することが可能か
と思います。
以上、よろしくお願いします。
On 1月3日, 午前10:40, cozyk100 <cozyk...@gmail.com> wrote:
わかりました。確かに、指定したシートだけ出力することは可能でした。
壊れたExcelができる原因はシート名の文字数によります。添付ファイルの
MultipleSheetSample.zip
をご覧ください。テンプレートに長~いシート名がある場合は壊れたExcelファイル
ができてしまいます。
以上、よろしくお願いします
シート名の文字数なのですね。
こちらでも調査しました。10バイトより長い文字だと壊れるようです。
内部的に確認しました。
シート名=テンプレート名の場合シートのコピーはせず、シート順を最後尾に移動しています。
POIでWorkbookのsetSheetOrderメソッドを呼んでいるのですが、
setSheetOrderメソッド呼出し後、長い名前のシートを削除するとExcelが壊れます。
おそらくシート順変更時に長い名前のシートがある場合、情報を保持してしまっているのだろうと思います。
(ExCellaでは、setSheetOrderメソッドはシート名=テンプレート名の場合しか使用していません)
テンプレートのシート名は10バイト以下でお願いするということで対応させていただきます。
以上、よろしくお願いいたします。
> > > 以上、よろしくお願いします- 引用テキストを表示しない -
>
> - 引用テキストを表示 -