Jasper 报告 Excel-CSV 导出:阻止执行 excel 公式

Jasper Report Excel-CSV Export: Prevent executing excel formula

我正在使用 Jasper Report API 4.5(如果此解决方案需要,准备更新)。使用 Jasper Report,我将报告导出为 HTML、Excel、CSV 和 PDF。我遇到的一种情况是,如果数据具有有效的 excel 公式,那么在将数据导出到 Excel 和 CSV 并查看文件到 MS Excel 时,它会执行 excel 公式。这会导致安全问题,因为某些数据使用 excel 公式在本地计算机上执行某些操作,然后可能会损害系统。

我们无法在插入时验证数据,这样做可能会解决问题。但是目前没有数据验证可以防止插入 excel 公式。我的首选解决方案是从 Jasper Report 进行管理。

我的问题是,是否有任何机制或导出参数可以阻止执行 excel 公式?或者有什么方法可以按原样打印数据并忽略 excel 公式?

对于 Excel 导出:

我们可以使用 Apache POISmartXLS API 将单元格类型设置为 Text 外部顺序从数据库中获得相同的结果。

对于 Apache POI,我们可以将单元格格式类型设置为 "@",这里是来自 Apache POI javadoc 的 link。

对于SmartXLS,我们可以设置工作簿范围样式来设置格式类型为Text,代码片段如下:

RangeStyle rangeStyle = workBook.getRangeStyle(1, 0, 50, 0);
rangeStyle.setCustomFormat("@");

对于 CSV 导出:

已升级 JasperReport 6.3。有一个功能可以将附件添加到 csv 字段。默认情况下 excel 将单引号 (') 作为字段括起来,因此可以将字段作为公式执行。为避免这种情况,我们可以将附件字段设置为 (`).

SimpleCsvExporterConfiguration reportExportConf = new SimpleCsvExporterConfiguration();

reportExportConf.setFieldEnclosure("`");
reportExportConf.setForceFieldEnclosure(true);