我正在使用Jasper Report API 4.5(如果此解决方案需要,可以随时更新)。使用Jasper Report我将报告导出为HTML,Excel,CSV和PDF。我遇到的情况是,如果数据具有有效的excel公式,那么在将数据导出到Excel和CSV并将文件查看到MS Excel时,它会执行excel公式。这会导致安全问题,因为某些数据具有excel公式,可以在本地计算机上执行某些操作,然后可能会损害系统。
我们无法在插入时验证数据,这样做可能会解决问题。但是目前没有数据验证可以防止插入excel公式。我的首选解决方案是从Jasper Report管理。
我的问题是,是否有任何机制或导出参数可以阻止excel公式执行?或者有没有办法按原样打印数据并忽略excel公式?
答案 0 :(得分:0)
对于Excel导出:
我们可以使用 Apache POI 或 SmartXLS API在外部将单元格类型设置为Text
,以便从数据库中获得相同的结果。
对于Apache POI ,我们可以将单元格格式设置为"@"
,这是来自Apache POI javadoc的链接。
对于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);