报表怎么打印,没有实体的数据

数据是经过代码计算出来的,并不在页面上展示,怎使用报表打印出来

这种情况只能使用 Groovy 脚本处理。

外部数据可以组成 DTO 实体的列表,传递给 Groovy 脚本:

uiReportRunner.byReportCode("status-of-funds")
        .addParam("categories", categories) // 这里将 DTO 实体用参数 categories 传进去。
        .withTemplateCode("sof-template")
        .withOutputType(ReportOutputType.XLSX)
        .withOutputNamePattern(outputName)
        .withParametersDialogShowMode(ParametersDialogShowMode.NO)
        .runAndShow();

然后在 Groovy 脚本中, 将DTO 列表转换为 List<Map<String, Object>>

return params['categories'].collect {[
    'name': it.name,
    'description': it.description
]}

图片
出现这个问题是数据集配置的不对吗

这个问题是模板配置的不对。报表数据集中的每个 Band 都需要在 xlsx 中有对应的命名区域(Microsoft Office 中使用 FormulasName Manager 菜单命令创建)。参考: 报表模板 :: Jmix 文档

另外,还可以从 报表示例 :: Jmix 文档 下载示例的 xls 的模板,看看示例中是怎么定义的命名区域。

图片
图片
图片
能请教是哪里配置错了吗

你看一下这个 报表示例 :: Jmix 文档 示例。

一共创建了 4 个 band:
image

然后在 xls 中:
image

也定义了同名的四个区域,并指定了 excel 中的范围。你应该是缺这一步。可以好好研究下文档中的那个例子。excel 可以在文档页面下载的:
image