Giter Club home page Giter Club logo

excella-reports's Introduction

Excella Reports

  1. ExCella Reportsとは

ExCella ReportsはExcelファイルをテンプレートとし、Excel形式またはPDF形式の帳票を作成する帳票ツールです。

リファレンス、Javadocは、こちらからご覧いただけます。 http://excella-core.github.io/

ExCella Reportsは株式会社ビーブレイクシステムズが 作成したオープンソースソフトウェアです。

  1. 配布条件

本ソフトウェアはApache License, Version 2.0にて公開しています。 詳細は「LICENSE.txt」ファイルまたは 以下のページを参照してください。 https://www.apache.org/licenses/LICENSE-2.0.txt

  1. 免責

このソフトウェアを使用したことによって生じたいかなる 障害・損害・不具合等に関しても、株式会社ビーブレイクシステムズは 一切の責任を負いません。各自の責任においてご使用ください。

  1. Maven repository

mavenの依存ライブラリとして追加する場合、pom.xmlに下記のリポジトリを追加してください。

  <repositories>
    <repository>
	  <id>excella.bbreak.org</id>
      <name>bBreak Systems Excella</name>
      <url>http://excella-core.github.io/maven2/</url>    
    </repository>
  </repositories>
  1. 更新履歴

  • 2023/09/28 Version 2.2 リリース
  • 2021/07/11 Version 2.1 リリース
  • 2019/12/24 Version 2.0 リリース
  • 2017/07/15 Version 1.11 リリース
  • 2017/01/28 Version 1.10 リリース
  • 2016/04/05 Version 1.9 リリース
  • 2016/01/17 Version 1.8 リリース
  • 2015/07/25 Version 1.7 リリース
  • 2014/08/18 Version 1.6 リリース
  • 2013/03/18 Version 1.5 リリース
  • 2010/11/19 Version 1.4 リリース
  • 2010/01/20 Version 1.3 リリース
  • 2009/11/20 Version 1.2 リリース
  • 2009/10/30 Version 1.1 リリース
  • 2009/06/25 Version 1.0 リリース

Copyright 2009 by bBreak Systems.

excella-reports's People

Contributors

daichan20 avatar dependabot[bot] avatar enunu avatar hibi-bb avatar kamisono-bb avatar maruta-bis5 avatar tsyki avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

excella-reports's Issues

出力文字列に($,$R[]{})が含まれる場合、値をタグとして解釈されている。

事象

・出力データに置換タグ形式の文字列(${test}等)が含まれる場合、その箇所が空で出力される。
・$test$のように$が出力データに複数含まれる場合、全ての$が消えてtestのみ出力される。
・出力データが$R[]{*}の場合、処理がループし正常に終了しない。

値の文字列をタグとして解釈できてしまうので、対応いただきたい。

$BR[]タグで追加された行に入力規制が設定されない

GoogleGroupより転記
https://groups.google.com/forum/#!topic/excella/64pvFjxyLIE

$BR[]タグを使用するとレコード分新たに行が追加されて書き出されますが、
その際に追加された行数分、入力規制(プルダウン)が反映されていないようです。

POIでは入力規制は1つのセルに依存しているものではなく、範囲指定で行うようで、
追加された行数分範囲指定からはずれてしまっているようです。

新たに入力規制を設定することはできたのですが、出来れば既存の入力規制の範囲指定
だけを変更したいと思っています。(Java側で入力規制の内容まで書いてしまうとメンテ等が
難しくなるので)

私の調査不足かもしれませんが・・・POIでは、入力規制を新規に作ることは出来ても、
既存の入力規制をとってこれないようで、苦戦しています。
(範囲指定だけを変更することが出来ません。)

これについてExcellaで何か対策のようなものがありましたら、ぜひご教授願います。

BlockRowRepeatParamParserを使用した際に、出力ファイルの最終列の幅が変わることがある

POIUtil.javaのcopyRange()で、
一時シートへの幅設定の列指定が<になっているため、最終列の情報がコピーされていない。
そのため、列幅を戻した時に列幅が変わってしまう。
<=にする必要がある。

int lastColNum = getLastColNum(fromSheet);
for(int i = 0; i < lastColNum; i++){
tmpSheet.setColumnWidth(i, fromSheet.getColumnWidth(i));
}

BlockRowRepeatParamParserパラメータのremoveTagについて

GoogleGroupより転記
https://groups.google.com/forum/#!topic/excella/ZOzHCv2tQyo

テンプレートファイル内に$BR[]を定義し、removeTag=trueを指定した場合の挙動としては、リファレンス内の説明にあります通り、行削除ではなくブランクになる認識でおります。
しかし、下記に示します方法で実行した場合には、removeTag=trueにしていたのにも関わらず、行が削除されてしまいました。

対応方法案:

BlockRowRepeatParamParser.javaの153行目で、データがない場合、処理をスキップしているのが原因のようです。
お急ぎ修正が必要でしたら、下記のように修正することで、設定が有効にできそうです。

BlockRowParamParser.java:L150
// パラメータ名に対応するデータ取得
Object[] paramInfos = getParamData( paramInfo, brTagName);
if ( paramInfos == null) {
// XXX *** ↓修正箇所↓ ***
boolean removeTag = false;
if ( paramDef.containsKey( PARAM_REMOVE_TAG)) {
removeTag = Boolean.valueOf( paramDef.get( PARAM_REMOVE_TAG));
}
// タグ除去
if ( removeTag) {
tagCell.setCellType( Cell.CELL_TYPE_BLANK);
}
// XXX *** ↑修正箇所↑ ***
return parsedReportInfo;
}

"mvn test" Failed (JDK 11)

JDK 11環境でmvn testを実行すると、下記のログに示すとおり、例外が発生して失敗します。

環境

Ubuntu 18.04 on WSL
OpenJDK 11 (openjdk-11 11~24-1~18.04 from https://launchpad.net/~openjdk-r/+archive/ubuntu/ppa)

※同じ環境でJAVA_HOMEをJDK8に設定した場合は問題なく終了する

mvn test ログ

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running org.bbreak.excella.reports.AllTestSuite
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.poi.openxml4j.util.ZipSecureFile$1 (file:/home/maruyama/.m2/repository/org/apache/poi/poi-ooxml/3.16/poi-ooxml-3.16.jar) to field java.io.FilterInputStream.in
WARNING: Please consider reporting this to the maintainers of org.apache.poi.openxml4j.util.ZipSecureFile$1
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
ブック処理結果:シート1=Sheet1,シート2=Sheet2,
ブック処理結果:シート1=Sheet3,
ブック処理結果:シート1=CSheet1,シート2=CSheet2,
ブック処理結果:シート1=Sheet3,
ブック処理結果:シート1=CSheet1,シート2=Sheet2,シート3=CSheet2,シート4=Sheet3,
ブック処理結果:シート1=CSheet2,シート2=Sheet2,シート3=CSheet3,シート4=Sheet3,
ブック処理結果:シート1=CSheet1,
ブック処理結果:シート1=Sheet1,シート2=Sheet2,
ブック処理結果:シート1=Sheet3,
ブック処理結果:シート1=CSheet1,シート2=CSheet2,
ブック処理結果:シート1=Sheet3,
ブック処理結果:シート1=CSheet1,シート2=Sheet2,シート3=CSheet2,シート4=Sheet3,
ブック処理結果:シート1=CSheet2,シート2=Sheet2,シート3=CSheet3,シート4=Sheet3,
ブック処理結果:シート1=CSheet1,
Tests run: 177, Failures: 0, Errors: 6, Skipped: 0, Time elapsed: 40.979 sec <<< FAILURE! - in org.bbreak.excella.reports.AllTestSuite
testParseSheetCellObject[1](org.bbreak.excella.reports.tag.RowRepeatParamParserTest)  Time elapsed: 1.183 sec  <<< ERROR!
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : class org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream cannot be cast to class java.util.zip.ZipFile$ZipFileInputStream (org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream is in unnamed module of loader 'app'; java.util.zip.ZipFile$ZipFileInputStream is in module java.base of loader 'bootstrap')
	at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.available(ZipFile.java:479)
	at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.available(ZipSecureFile.java:315)
	at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshall(ZipPartMarshaller.java:84)
	at org.apache.poi.openxml4j.opc.ZipPackagePart.save(ZipPackagePart.java:124)
	at org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller.marshall(DefaultMarshaller.java:43)
	at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:585)
	at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1543)
	at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:248)
	at org.bbreak.excella.core.util.PoiUtil.writeBook(PoiUtil.java:366)
	at org.bbreak.excella.reports.tag.RowRepeatParamParserTest.checkSheet(RowRepeatParamParserTest.java:424)
	at org.bbreak.excella.reports.tag.RowRepeatParamParserTest.testParseSheetCellObject(RowRepeatParamParserTest.java:128)

testParseSheetCellObject[1](org.bbreak.excella.reports.tag.ColRepeatParamParserTest)  Time elapsed: 1.016 sec  <<< ERROR!
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : class org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream cannot be cast to class java.util.zip.ZipFile$ZipFileInputStream (org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream is in unnamed module of loader 'app'; java.util.zip.ZipFile$ZipFileInputStream is in module java.base of loader 'bootstrap')
	at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.available(ZipFile.java:479)
	at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.available(ZipSecureFile.java:315)
	at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshall(ZipPartMarshaller.java:84)
	at org.apache.poi.openxml4j.opc.ZipPackagePart.save(ZipPackagePart.java:124)
	at org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller.marshall(DefaultMarshaller.java:43)
	at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:585)
	at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1543)
	at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:248)
	at org.bbreak.excella.core.util.PoiUtil.writeBook(PoiUtil.java:366)
	at org.bbreak.excella.reports.tag.ColRepeatParamParserTest.checkSheet(ColRepeatParamParserTest.java:397)
	at org.bbreak.excella.reports.tag.ColRepeatParamParserTest.testParseSheetCellObject(ColRepeatParamParserTest.java:125)

testParseSheetCellObject[1](org.bbreak.excella.reports.tag.BlockColRepeatParamParserTest)  Time elapsed: 1.045 sec  <<< ERROR!
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : class org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream cannot be cast to class java.util.zip.ZipFile$ZipFileInputStream (org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream is in unnamed module of loader 'app'; java.util.zip.ZipFile$ZipFileInputStream is in module java.base of loader 'bootstrap')
	at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.available(ZipFile.java:479)
	at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.available(ZipSecureFile.java:315)
	at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshall(ZipPartMarshaller.java:84)
	at org.apache.poi.openxml4j.opc.ZipPackagePart.save(ZipPackagePart.java:124)
	at org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller.marshall(DefaultMarshaller.java:43)
	at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:585)
	at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1543)
	at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:248)
	at org.bbreak.excella.core.util.PoiUtil.writeBook(PoiUtil.java:366)
	at org.bbreak.excella.reports.tag.BlockColRepeatParamParserTest.checkSheet(BlockColRepeatParamParserTest.java:741)
	at org.bbreak.excella.reports.tag.BlockColRepeatParamParserTest.testParseSheetCellObject(BlockColRepeatParamParserTest.java:214)

testParseSheetCellObject[1](org.bbreak.excella.reports.tag.BlockRowRepeatParamParserTest)  Time elapsed: 1.04 sec  <<< ERROR!
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : class org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream cannot be cast to class java.util.zip.ZipFile$ZipFileInputStream (org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream is in unnamed module of loader 'app'; java.util.zip.ZipFile$ZipFileInputStream is in module java.base of loader 'bootstrap')
	at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.available(ZipFile.java:479)
	at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.available(ZipSecureFile.java:315)
	at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshall(ZipPartMarshaller.java:84)
	at org.apache.poi.openxml4j.opc.ZipPackagePart.save(ZipPackagePart.java:124)
	at org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller.marshall(DefaultMarshaller.java:43)
	at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:585)
	at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1543)
	at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:248)
	at org.bbreak.excella.core.util.PoiUtil.writeBook(PoiUtil.java:366)
	at org.bbreak.excella.reports.tag.BlockRowRepeatParamParserTest.checkSheet(BlockRowRepeatParamParserTest.java:731)
	at org.bbreak.excella.reports.tag.BlockRowRepeatParamParserTest.testParseSheetCellObject(BlockRowRepeatParamParserTest.java:213)

testPostParse[1](org.bbreak.excella.reports.listener.RemoveAdapterTest)  Time elapsed: 0.872 sec  <<< ERROR!
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : class org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream cannot be cast to class java.util.zip.ZipFile$ZipFileInputStream (org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream is in unnamed module of loader 'app'; java.util.zip.ZipFile$ZipFileInputStream is in module java.base of loader 'bootstrap')
	at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.available(ZipFile.java:479)
	at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.available(ZipSecureFile.java:315)
	at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshall(ZipPartMarshaller.java:84)
	at org.apache.poi.openxml4j.opc.ZipPackagePart.save(ZipPackagePart.java:124)
	at org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller.marshall(DefaultMarshaller.java:43)
	at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:585)
	at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1543)
	at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:248)
	at org.bbreak.excella.core.util.PoiUtil.writeBook(PoiUtil.java:366)
	at org.bbreak.excella.reports.listener.RemoveAdapterTest.checkSheet(RemoveAdapterTest.java:135)
	at org.bbreak.excella.reports.listener.RemoveAdapterTest.testPostParse(RemoveAdapterTest.java:100)

testPostParse[1](org.bbreak.excella.reports.listener.BreakAdapterTest)  Time elapsed: 1.168 sec  <<< ERROR!
org.apache.poi.openxml4j.exceptions.OpenXML4JRuntimeException: Fail to save: an error occurs while saving the package : class org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream cannot be cast to class java.util.zip.ZipFile$ZipFileInputStream (org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream is in unnamed module of loader 'app'; java.util.zip.ZipFile$ZipFileInputStream is in module java.base of loader 'bootstrap')
	at java.base/java.util.zip.ZipFile$ZipFileInflaterInputStream.available(ZipFile.java:479)
	at org.apache.poi.openxml4j.util.ZipSecureFile$ThresholdInputStream.available(ZipSecureFile.java:315)
	at org.apache.poi.openxml4j.opc.internal.marshallers.ZipPartMarshaller.marshall(ZipPartMarshaller.java:84)
	at org.apache.poi.openxml4j.opc.ZipPackagePart.save(ZipPackagePart.java:124)
	at org.apache.poi.openxml4j.opc.internal.marshallers.DefaultMarshaller.marshall(DefaultMarshaller.java:43)
	at org.apache.poi.openxml4j.opc.ZipPackage.saveImpl(ZipPackage.java:585)
	at org.apache.poi.openxml4j.opc.OPCPackage.save(OPCPackage.java:1543)
	at org.apache.poi.POIXMLDocument.write(POIXMLDocument.java:248)
	at org.bbreak.excella.core.util.PoiUtil.writeBook(PoiUtil.java:366)
	at org.bbreak.excella.reports.listener.BreakAdapterTest.checkSheet(BreakAdapterTest.java:129)
	at org.bbreak.excella.reports.listener.BreakAdapterTest.testPostParse(BreakAdapterTest.java:105)


Results :

Tests in error: 
  RowRepeatParamParserTest.testParseSheetCellObject:128->checkSheet:424 » OpenXML4JRuntime
  ColRepeatParamParserTest.testParseSheetCellObject:125->checkSheet:397 » OpenXML4JRuntime
  BlockColRepeatParamParserTest.testParseSheetCellObject:214->checkSheet:741 » OpenXML4JRuntime
  BlockRowRepeatParamParserTest.testParseSheetCellObject:213->checkSheet:731 » OpenXML4JRuntime
  RemoveAdapterTest.testPostParse:100->checkSheet:135 » OpenXML4JRuntime Fail to...
  BreakAdapterTest.testPostParse:105->checkSheet:129 » OpenXML4JRuntime Fail to ...

Tests run: 177, Failures: 0, Errors: 6, Skipped: 0

The ruled lines of unmerged cells disappear.

Describe the bug

The ruled lines of unmerged cells disappear.

Reproducer

source code

public class ImageExporter {

	public static void main(String[] args) throws Exception {
		String templateFileName = "ImageParamParser_test.xls";
		URL templateFileUrl = ImageExporter.class.getResource(templateFileName);
		String templateFilePath = URLDecoder.decode(templateFileUrl.getPath(), "UTF-8");

		String outputFileName = "ImageParamParser_test_result";
		String outputFileDir = "./";
		String outputFilePath = outputFileDir.concat(outputFileName);
		ReportBook outputBook = new ReportBook(templateFilePath, outputFilePath, ExcelExporter.FORMAT_TYPE);

		ReportSheet outputSheet = new ReportSheet("ImageParamParser_test");
		outputBook.addReportSheet(outputSheet);

		// any image
		URL imageFileUrl = ImageExporter.class.getResource("ロゴ.jpg");
		String imageFilePath = URLDecoder.decode(imageFileUrl.getPath(), "UTF-8");
		outputSheet.addParam(ImageParamParser.DEFAULT_TAG, "merged_cell", imageFilePath);
		outputSheet.addParam(ImageParamParser.DEFAULT_TAG, "unmerged_cell", imageFilePath);

		ReportProcessor reportProcessor = new ReportProcessor();
		reportProcessor.process(outputBook);
	}
}

report template

ImageParamParser_test.xls

If you move the image of a cell that has not been merged, you can see that the ruled lines have disappeared.

Expected behavior

Since the ruled lines of merged cells have not disappeared, the ruled lines of unmerged cells should not disappear either.

Excella Reports version

2.1

Java version

8

POI3.11以降の画像リサイズ対応について

以下の通り、poiのバージョンによって画像リサイズ仕様が異なります。

  • POI3.10.1まで:Picture#resize(double)は元画像サイズをもとにリサイズ
  • POI3.11以降:画像を差し込むセルのサイズをもとにリサイズ

ExCella ReportsではPOI3.11以降を利用して画像のリサイズ(ImageParamParser用タグのscaleを指定)を実行すると
差込対象のセルを基準にリサイズ処理が実行されてしまいます。
上記を解消するため、以下修正が必要だと思いますのでご対応をお願いします。
※以下の件を修正したソースコードを添付しますので、修正内容は添付ファイルソースコード内のTODOコメントを参照してください。

  • パラメータtoCellを追加(toCell=画像の始点を起点(0)とした画像出力領域の終了セル行:画像の始点を起点(0)とした画像出力領域の終了セル列)
  • ImageParamParser#replaceImageValue内のClientAnchor(row2、col2)にパラメータtoCellの値を設定する
  • ImageParamParserのパラメータscaleが未指定、若しくは1(1.0)の場合はpicture.resize();を実行する処理を追加

ImageParamParser.zip

*RepeatParamParser should provide more helpful exception message when passing not array

RowRepeatParamParser等の繰り返し出力を行うタグについて、ReportSheet#addParam(String, String, Object)にてObject[]以外をデータとして渡す(第3引数)とClassCastExceptionが発生します。

Sheet[Sheet2] Cell[15,1] Message[java.lang.ClassCastException: java.lang.Integer cannot be cast to [Ljava.lang.Object;] Cause[java.lang.ClassCastException: java.lang.Integer cannot be cast to [Ljava.lang.Object;] 
    at org.bbreak.excella.reports.tag.RowRepeatParamParser.parse(RowRepeatParamParser.java:416)
    at org.bbreak.excella.reports.tag.RowRepeatParamParser.parse(RowRepeatParamParser.java:49)
    at org.bbreak.excella.core.SheetParser.parseCell(SheetParser.java:127)
    at org.bbreak.excella.core.SheetParser.parseSheet(SheetParser.java:97)
    at org.bbreak.excella.core.BookController.parseSheet(BookController.java:244)

繰り返し出力が出来ないため例外が発生する点は妥当かと思いますが、何が問題か判断出来るような例外メッセージを出力するべきです。

ライセンスについて

ReadmeファイルにはLGPLライセンスと書かれていますが、LICENSEファイルはApacheライセンスと書かれています(View Licenseの表示がApacheLisenceとして表示されます)。

どちらが正しいのでしょうか?それともデュアルライセンスでしょうか?

$BC[]タグもしくは$BR[]タグで指定した範囲内にExcel関数が入力されたセルがあると例外が発生します。

$BC[]タグもしくは$BR[]タグで指定した範囲内にExcel関数(SUMなど)が入力されたセルがあると、以下の例外が発生します。

Message[java.lang.IllegalArgumentException: Calling Cell.setCellType(CellType.FORMULA) is illegal. Use setCellFormula(String) directly.] Cause[java.lang.IllegalArgumentException: Calling Cell.setCellType(CellType.FORMULA) is illegal. Use setCellFormula(String) directly.] 
	at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:515)
	at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:51)

利用しているライブラリは以下です。
poi-4.1.1.jar
excella-reports-1.1.jar
excella-reports-2.0.jar

大量イメージの扱いについて

イメージタグで大量にイメージを差し込むとファイルサイズが大きくなってしまう。同じ画像は作成しないなどできないか?

PDF出力処理について

現状jod-converterからLibreOfficeの起動できないため、PDF出力部分のテストが通らない。
(jod-converterで指定しているLibreOfficeのインストールディレクトリの指定がデフォルト違うのと、そこを直したとしてもWindowsのプロセスを起動することができない。)
PDF出力のためだけに必要なライブラリも多いので、PDF出力部分はexcella-reportsから独立させたい。

BlockRowRepeatParamParserのエラー(POI 3.11以降、BRの中にBRを記述した場合)

Google Groupより転記
https://groups.google.com/forum/#!topic/excella/P6DG0reRegU

Caused by: java.lang.IllegalArgumentException: lastRow < firstRow || lastCol < firstCol
at org.apache.poi.ss.util.CellRangeAddress.(CellRangeAddress.java:53)
at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:411)
... 30 more

原因は以前の投稿と同様で、POI 3.11 で追加された CellRangeAddress のチェックに引っかかった為。
発生位置はBlockRowRepeatParamParserの411行目。

BRの中にBRを記述しているレポートの場合に上記エラーが発生する。

$BR[]{list,fromCell=1:0,toCell=4:16}
$BR[]{subList,fromCell=1:0,toCell=1:16}

ReportProcessListener: メソッド参照・ラムダ式で指定できるようにしたい

ReportProcessListenerを指定する際、現状ではReportProcessListenerインタフェースの実装クラス(匿名クラス可)を作成するか、ReportProcessAdaptorのサブクラスを作成する必要がある。

preParse, postParse, preBookParse, postBookParseのそれぞれに対応した関数型インタフェースを作成して、その型でReportProcessorに登録できるようにしたい。

POI 3.11だとBlockRowRepeatParamParser でエラーが発生する

Caused by: java.lang.IllegalArgumentException: lastRow < firstRow || lastCol < firstCol
at org.apache.poi.ss.util.CellRangeAddress.(CellRangeAddress.java:53)
at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:473)
... 29 more
Sheet[Quotation] Cell[16,0] Message[java.lang.IllegalArgumentException: lastRow < firstRow || lastCol < firstCol] Cause[java.lang.IllegalArgumentException: lastRow < firstRow || lastCol < firstCol]
at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:502)
at org.bbreak.excella.reports.tag.BlockRowRepeatParamParser.parse(BlockRowRepeatParamParser.java:57)

3.11 から CellRangeAddress のコンストラクタの52~53行目に
「if (lastRow < firstRow || lastCol < firstCol)」のチェックが追加された為

Google Groupより転記

S2Fisshplateのような機能がほしい

Google Groupより転記
https://groups.google.com/forum/#!topic/excella/lnABOlEeTc8

個人的にはS2Fisshplateのように、 Excelテンプレートのタグで出力するデータや
書式の切替ができると、より使いやすくなると思います。
そこまでできれば機能的にはS2Fisshplateにも負けていないと思いますので、
今後何か良い方法が見つかりましたら対応していただけると助かります。

Improve code quality

コード品質向上のため、SonarQubeの使用を開始しました。
多数の指摘が上がっているため順次修正していきます。
https://sonarcloud.io/project/issues?id=excella-core_excella-reports&resolved=false

Feel free to fix and provide PR!

修正時のお願い

  • 1種類の指摘に対する修正を1つのPull Requestとしてください。
    • 例: 指摘1指摘2はいずれもルールThe diamond operator ("<>") should be usedによる指摘であるため、1つのPRでまとめて修正してOK
    • 例: 指摘1指摘3は別のルールによる指摘のため、別PRとする
  • 同じルールによる指摘をすべて網羅していなくてもOKです(1ファイルだけ修正する、等)が、同じ指摘がファイル中にあればすべて修正してください。
  • 修正しなくても問題なさそうな指摘があれば、このIssueで教えてください。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.