Skip to main content

创建报表文件

访问路径:数据功能 -> 创建报表文件

功能简述

提供创建自定义Excel/csv报表文件的能力。

  • 数据来源:如果未额外设置,则从当前工作库获取数据,否则将从指定的外部数据源中获取。
  • 文件格式:支持xlsx、csv两种格式的报表文件。
  • 文件模板:如果是xlsx格式文件,系统提供用户自定义模版功能。新的报表将会基于指定的用户报表模版来创建。如果没有指定,将创建一个新xlsx文件来生成报表。
  • 压缩类型:支持非压缩、zip和gz的文件压缩模式。压缩文件名将在源文件名后直接添加后缀。

创建Xlsx报表

Report Config

Excel格式报表中,系统支持创建以下类型元素:

  • 数据列表
  • 透视图
  • 图表

共计三种类型的数据对象。每个数据对象都将在特定页签内创建,一个页签可以按需求,创建多个不用的数据对象。在使用了用户自定义模版的任务中,如果页签名称已经存在,则不会创建新的页签,否则会在报表中创建新的页签。

  1. 数据列表

    在创建或调整现有数据对象前,都需要先配置该数据对象的基本属性信息,包括:

    • 页签名称:
      即在哪个页签里面创建当前数据对象,页签名称可以为新页签,或用户自定义模版中已存在的页签名称。
      页签名称支持变量解析,从而可以支持动态页签名称,如填写的是:<var:sheetName/><var:CurrYearMonth/>等变量,则在创建报表时,先解析出当期变量值后,再以解析出的变量值来命名或创建页签。
      如果用户自定义模版中,页签名称需要动态调整的话,先在页面对应的页签名称栏位中配置成:<var:sheetName/>, 在Excel模版文件中将需要动态调整的页签名改为:$$sheetName。后期系统在生成新报表时,会先获取当前变量值,再将对应报表中的页签名称调整成对应值。注意:同时设置的变量名是一致的,只是格式符号有所不同。

    Sheet Name

    • 数据对象:
      如果同一个Excel页签中需要处理多个数据区,且各个数据区之间需要计算起止位置的话,需要提供数据对象名,用于标识特定数据区间。设置数据对象名后,在完成当前数据区域处理后,系统将会自动创建该数据集对应的起始、终止及行列数的系统变量,这些变量可以在后续其它数据区定位时被直接引用,从而实现地址偏移量的计算。自动创建的参数如下:

      data.on_p2.cols			            //数据集占用的列数
      data.on_p2.rows //数据集占用的行数
      data.on_p2.actStartRow //数据集在Excel中实际的开始行
      data.on_p2.actEndRow //数据集在Excel中实际的截至行
      data.on_p2.actStartCol //数据集在Excel中实际的起始列
      data.on_p2.actEndCol //数据集在Excel中实际的截至列

      注:上述参数中 data.on_p2 是根据用户在页面中定义的值动态创建的(实际业务中可变)。如果这些值中含有其它变量元素,系统会使用解析后的值作为上述变量的名称。其中data为页签名称,on_p2 为数据对象名,随后的变量名称为系统自动添加的,用来定位用的变量名。
      应用方式同普通变量一样,如:

      <var:data.on_p2.cols/>
      <var:data.on_p2.actStartRow/> - 2
      <var:data.on_p2.actEndRow/> + 7

      如果预引用的目标数据对象和当前正在处理的数据集对象处于同一个Excel页签内,可以用精简模式访问:

      <var:curSheet:on_p2.cols/>

      其中 curSheet 会由系统自动替换成但前页签的名称后进行匹配。 如下面示例中:数据对象 on_p3 也是在 data 页签内,但是处于数据对象 on_p2 下方,填充时,会自动依据 on_p2 数据集合内填充的记录数进行累加进行定位。+2,表示的是当前数据集 on_p3 会定位在数据集 on_p2 最后一行后间隔 2 行的地方。

    • 对象处理次序:
      Excel可以可以定义多个数据对象,按这个次序来进行先后处理。该值需要考虑数据更新,及处理逻辑的先后次序。

    • 对象行坐标值:
      从第1行开始计算,支持系统或自定义变量的引用。如:
      <var:curSheet.on_p2.actEndRow/>+2 表示在 当前页签 中的 on_p2 数据对象的 实际截至行 的基础上再向下增加2行,计算后得到的行数,作为当前数据对象的起始行坐标。

    • 对象列坐标值:
      从第1列开始计算,支持系统或自定义变量的引用。
      <var:curSheet.on_p2.actEndCol/>+1 表示在 当前页签 中的 on_p2 数据对象的 实际截至列 的基础上再向后增加1列,计算后得到的列数,作为当前数据对象的起始列坐标。

    如果是在配置数据列表对象,则还可以配置

    • 数据页签样式:支持类似Excel里面的数据表格样式。
    • 是否自动列宽调整:如果勾选,则在创建数据列表后,会自动调整默认列的宽度。
    • 按表对象模式创建:如果勾选,则将创建一个表对象,同时将可以利用Excel系统内置的表格样式,否则需要自定义数据区域内的样式。但需要注意,如果选择表对象模式,表内单元格无法进行合并处理。 。如果没有勾选,将仅仅实现类似单元格的数据填充效果。

    案例如下:

    XLSX Report Configuration

  2. 数据列表 - 数据查询

    创建数据列表时,需要提供对应的数据来源脚本,和数据的填充模式:

    • 数据脚本:
      如果在报表任务中未指定数据源,则将使用当前的工作库,否则将从指定的数据源中执行SQL脚本,并获取数据集。脚本格式需要兼容数据源语法,同时,也支持系统或自定义变量的迁入功能。注意:数据查询对应的字段顺序,需要和Excel中待填充区域的列次序保持一致。

    • 是否添加栏位名称:
      如果勾选,则在插入数据时,会同时插入相应的字段名列表,如果没有勾选,则仅仅插入查询到的数据内容。如,在使用用户自定义模式时,列名可能已经在模版中存在,则不需要重复插入数据集合中的字段名。
      注:如果后期需要基于该数据对象创建关联的透视图,则需要勾选,保证创建的表对象是完整的,否则关联的透视图会失败。

    • 数据填充模式:用于区别数据在Excel中的插入方式。

      • 整行模式插入:相当于在指定行列坐标处,插入整行。插入后,会将坐标行下的,所有原有内容都向下平移数据集合中记录行数。
      • 单元格下插入: 和上述模式类似,但仅仅影响插入数据集开始列至截至列的区域,在该区域内原有的内容会下平移,截至列后的原有内容定位,保持不变。适用于特定区域内插入数据,但不影响其它布局。
      • 内容粘贴: 不同于上述2中操作,不会添加新的行,仅仅从起始行列处,将数据集中的数据粘贴上去,会覆盖粘贴区域原有的数据。

      插入数据后,系统会自动根据数据集中对应字段的数据类型来初始化对应列的数据默认格式,如数值型、日期型等。同时,还可以通过数据格式功能,针对特定列或数据区域进行内容、公式填充,以及定义单元格样式等。

    案例如下:

    Data Query

  3. 数据列表 - 数据格式

    在使用数据列表时,数据插入后,系统会自动根据数据集合中对应字段的数据类型,进行默认的初始化,如小数、整数、日期等。但同时为了特定需求,也可以通过 添加格式要求 来自定义数据列表呈现的格式。例如:

    Sheet Data Format

    自定义的格式要求配置信息,包括3种自定义模式:

    1. 基本信息

      • 格式名称:用于定义格式的名称,便于区别。
      • 数据区域:需要进行格式化的数据区域,可以是Excel标准的区域定义,如:A1:D1,也可以使用当前数据集合中对应的字段名,或当前功能模块专有内容定位标识变量:
        [xls:firstrow]      //数据集起始位置的第一行
        [xls:prerow] //数据集中前一行,如果引用,系统会自动遍历整个数据集动态计算前一行
        [xls:currrow] //数据集中当前行,如果引用,系统会自动遍历整个数据集动态计算当前行
        [xls:nextrow] //数据集中下一行,如果引用,系统会自动遍历整个数据集动态计算下一行
        [xls:lastrow] //数据集中最后一行,即起始位置加上记录总数。
        [UserName] //数据集中的用户名字段名,系统会基于起始列和字段集中的次序,计算出对应列位置。
        这些系统自定义标识位,和Excel的标识区域定位可以一起使用。同时,系统支持计算表达式。结合上面说的内容定位变量,可以做以下拓展:
        [xls:firstrow – 2]  //在当前数据区起始行的基础上上移2行,如起始行是第10行,则结果为第8行
        [xls:lastrow + 3] //在当前数据区截至行的基础上后移3行
        [<var:curSheet.on_p2.actEndRow/>+3] //在当前页签中的on_p2数据对象的截至行上增加3行
        [CountryName + 2] //将数据集中名称为CountryName的字段所在的列数上右偏移2列
      • 次序:表示格式信息处理的次序
      • 内容类别:用于区分用户提供的数据内容是单元格文本内容,还是公式。
      • 数据内容:依据上述类别,提供的可能是单元格文本,或公式。
      • 数据类别:提供公式,将有助于单元格文本更好的格式化。
      • 数据格式:对单元格内容显示进行格式化,如yyyy-MM等。(配置数据类别使用)
      • 操作类型:在内容填充的同时,是否需要进行额外的操作,如当前数据区是否需要列合并等。

      Customized Format

    2. 数据样式

      提供针对在基本信息中指定的数据区域单元格的样式设置,点击 添加单元格样式JSON模版 按钮,如果当前未设置样式,则系统将提供完整的单元格样式JSON模版。用户可以根据需要剪裁JSON格式配置。

      {
      "font": {
      "bold": true,
      "color": "125,125,125",
      "name": "微软雅黑",
      "size": 23,
      "italic": true,
      "strike": true,
      "underline": true,
      "underlinetype": "None/Single/Double/SingleAccounting/DoubleAccounting"
      },
      "border": {
      "around": {
      "style": "None/Hair/Dotted/DashDot/Thin/DashDotDot/Dashed/MediumDashDotDot/MediumDashed/MediumDashDot/Thick/Medium/Double",
      "color": "125,125,125"
      },
      "top": {
      "style": "Hair",
      "color": "125,125,125"
      },
      "bottom": {
      "style": "Hair",
      "color": "125,125,125"
      },
      "left": {
      "style": "Hair",
      "color": "125,125,125"
      },
      "right": {
      "style": "Hair",
      "color": "125,125,125"
      }
      },
      "background": {
      "patterntype": "None/Solid/DarkGray/MediumGray/LightGray/Gray125/Gray0625/DarkVertical/DarkHorizontal/DarkDown/DarkUp/DarkGrid/DarkTrellis/LightVertical/LightHorizontal/LightDown/LightUp/LightGrid/LightTrellis",
      "color": "125,125,125"
      },
      "content": {
      "halignment": "General/Left/Center/CenterContinuous/Right/Fill/Distributed/Justify",
      "valignment": "Top/Center/Bottom/Distributed/Justify",
      "wraptext": true
      }
      }
    3. 条件格式

      提供Excel内置6种分类的条件格式化支持,点击 添加单元格条件格式JSON模版 按钮,系统将提供完整的JSON格式配置信息,用户可以根据需要配置多个JSON数组以支持多种条件格式。
      下图是Excel内容的条件格式配置页面:
      Excel Condition
      与之对应的是系统内置的JSON格式配置信息,通过JSON格式的配置,可以实现在XLSX报表中创建条件格式。注意:JSON数组模式

      [
      {
      "two-colors": {
      "low": {
      "type": "Formula/Max/Min/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "color": "125,125,125"
      },
      "high": {
      "type": "Formula/Max/Min/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "color": "125,125,125"
      },
      "stop-if-true": true
      },
      "three-colors": {
      "low": {
      "type": "Formula/Max/Min/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "color": "125,125,125"
      },
      "mid": {
      "type": "Formula/Max/Min/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "color": "125,125,125"
      },
      "high": {
      "type": "Formula/Max/Min/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "color": "125,125,125"
      },
      "stop-if-true": true
      },
      "data-bar": {
      "fill-style": "PatternFill/GradientFill",
      "fill-color": "123,123,123",
      "border-color": "123,123,123",
      "low": {
      "type": "Formula/Max/Min/Num/Percent/Percentile",
      "value": "",
      "formula": ""
      },
      "high": {
      "type": "Formula/Max/Min/Num/Percent/Percentile",
      "value": "",
      "formula": ""
      },
      "has-border": false
      },
      "three-icons": {
      "icon-type": "Arrows/ArrowsGray/Flags/Signs/Symbols/Symbols2/TrafficLights1/TrafficLights2",
      "icon1": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon2": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon3": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      }
      },
      "four-icons": {
      "icon-type": "Arrows/ArrowsGray/Flags/Signs/Symbols/Symbols2/TrafficLights1/TrafficLights2",
      "icon1": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon2": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon3": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon4": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      }
      },
      "five-icons": {
      "icon-type": "Arrows/ArrowsGray/Flags/Signs/Symbols/Symbols2/TrafficLights1/TrafficLights2",
      "icon1": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon2": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon3": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon4": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      },
      "icon5": {
      "type": "Formula/Num/Percent/Percentile",
      "value": "",
      "formula": "",
      "granter-and-equal": false
      }
      },
      "date-occur": {
      "occur-act-type": "Yesterday/Today/Tomorrow/Last7Days/LastWeek/ThisWeek/NextWeek/LastMonth/ThisMonth/NextMonth",
      "cell-style": {}
      },
      "cell-value": {
      "cell-act-type": "Between/NotBetween/Equal/NotEqual/GreaterThan/LessThan/GreaterThanOrEqual/LessThanOrEqual",
      "formula": "",
      "formula2": "",
      "cell-style": {}
      },
      "specific-text": {
      "specific-text-act-type": "ContainsText/NotContainsText/BeginsWith/EndsWith",
      "text": "",
      "cellstyle": {}
      },
      "specific-value": {
      "specific-value-act-type": "ContainsBlanks/ContainsErrors/NotContainsBlanks/NotContainsErrors",
      "cellstyle": {}
      },
      "on-rank": {
      "rank-act-type": "Top/TopPercent/Bottom/BottomPercent",
      "rank": 0,
      "cellstyle": {}
      },
      "on-average": {
      "aver-act-type": "AboveAverage/AboveOrEqualAverage/BelowAverage/BelowOrEqualAverage/AboveStdDev/BelowStdDev",
      "std-dev": 123,
      "cellstyle": {}
      },
      "on-duplicate": {
      "dup-act-type": "DuplicateValues/UniqueValues",
      "cellstyle": {}
      },
      "on-formula": {
      "formu-act-type": "Expression",
      "formula": "",
      "cell-style": {}
      },
      "priority": 0
      }
      ]
  4. 透视图

    在完成数据列表创建后,可以基于数据列表来创建新的透视图对象,或使用用户自定义报表模版中已含有的透视图对象。系统将通过在 基本信息 中配置的页签名和数据对象名称来检测当前的透视图对象是否存在。如果不存在,将基于 对象设置 页签的配置信息来创建。如果已存在,则会基于 对象配置 页签中的配置信息,对现有透视图配置进行调整。

    1. 数据源对象

      透视图可以通过2种方式来指定数据源:

      • 数据页签:可以仅指定页签名称,系统将自动获取指定页签中的数据范围,并用于关联当前透视图。支持变量解析,如: <var:sheetName/>
      • 数据页签+数据列表对象:需要同时指定页签名和内部的对象名,并使用逗号分割。如: summary,on_p3。 其中 summary 是页签名称,on_p3 是数据列表对象名称。
    2. 透视筛选列

      透视图的筛选列。支持添加多个筛选列,并可指定选中或不选中的列值。格式如下:

      [字段名|{#,##0}|sel:s/m|in:1,"","字段值"|out:"字段值"];[..]
      • 所有字段以 [] 进行包裹,里面的配置项以 | 符号进行分割,多个字段信息以 ; 分号进行分割。
      • {} 包含当前数据的格式信息,可参考数据格式章节。
      • sel:s/m,以sel:开头,后面跟随 sm 表示筛选列是单选模式,还是多选模式,如果未指定,则默认是多选模式。
      • in:"CreateTable","GetNext"in: 开头,其后列表值以逗号分割,用于表示过滤列中需要选中的值。
      • out:"ABC","123", 以 out: 开头,其后用逗号分割的值,将被取消选中。
    3. 透视数据列

      配置方式同上,以分号区分多个字段,以方括号包括单个字段配置信息。

    4. 透视数据行

      配置方式同上,但不支持 in:out:功能。

    5. 透视计算列

      用于配置透视图中的计算项目,格式如下:

      count/sum/min/max[字段名|{#,##0}];[..]
      • 计算项支持常用的计算功能:count、sum、min、max方法,根据计算场景,选择其中一个方法名称,如:count[invoked_qty|{#,##0}]
      • 不支持 in:out:功能

      Pivot Setting

  5. 图表

    在完成透视图对象创建后,可以基于该透视图对象来创建新的图表,或使用的用户自定义报表模版中已含的图表对象。系统将通过在 基本信息 中配置的页签名和数据对象名称来检测当前的图表对象是否存在。如果不存在,将基于 对象设置 页签的配置信息来创建,否则会忽略 对象配置 页签中的配置信息,仅刷新已有的图表对象。

    • 数据源对象
      使用以创建的透视图为数据源,创建相应的图表。页签名,透视图对象名 模式进行定义。
    • 图表标题
      图表的标题名称
    • 图表样式
      参考当前Excel对应的版本,可以填入类似的样式名称: Style1、Style2 等。
    • 图表类型 支持条形图、柱状图和饼图
    • 对象高度
      定义图表的宽和高

    图表功能模块还可以支持图表图形的导出功能,如果选择了导出图像 选项,在系统刷新Excel文件后,将图表的图像会另存成单独图片,并支持后续其它任务的调用。为了支持拓展应用,系统会自动创建以下几个系统变量,便于后续任务中应用该图表图像。

    注:该功能仅限于使用用户自定义模版的场景下。
    变量名内容应用场景
    <var:SheetObj_2af140eb-d853-48de-988c-cd8d01dffc03/>图像名称的引用在邮件正文中显示图表图片
    <var:SheetObj_2af140eb-d853-48de-988c-cd8d01dffc03_IMG_Base64/>Base64格式的图像信息企业微信群消息
    <var:SheetObj_2af140eb-d853-48de-988c-cd8d01dffc03_IMG_Base64_WithFlag/>添加Base64头信息的图像信息企业微信群消息
    <var:SheetObj_2af140eb-d853-48de-988c-cd8d01dffc03_IMG_MD5/>图像的MD5码值企业微信群消息
    注:上述变量中含有的GUID值,为对应报表任务中含图表的页签对象ID,实际开发中,需要替换成对应的对象ID
    • 邮件正文中的集成
      在邮件正文中,可以插入该变量,既可以将相应的图表图片显示在邮件正文中。
      注:需要在邮件任务中添加对该报表图表对象的引用

      <hr style="color:#007858;height:5px;">
      <img src=<obj:SheetObj_2af140eb-d853-48de-988c-cd8d01dffc03/> width="800"/>
      <hr>
    • 企业微信群图形消息
      在创建完报表文件后,可以通过企业微信的群机器将图片信息推送给特定的用户群组。

      {
      "msgtype": "image",
      "image": {
      "base64": "<var:SheetObj_2af140eb-d853-48de-988c-cd8d01dffc03_IMG_Base64/>",
      "md5": "<var:SheetObj_2af140eb-d853-48de-988c-cd8d01dffc03_IMG_MD5/>"
      }
      }

      Chart Setting

创建Csv报表

CSV Report