找回密码
 立即注册

QQ登录

只需一步,快速开始

end..

注册会员

2

主题

6

帖子

20

积分

注册会员

积分
20
  • 85

    金币

  • 2

    主题

  • 6

    帖子

最新发帖
end..
注册会员   /  发表于:2024-7-4 11:28  /   查看:1466  /  回复:10
本帖最后由 Ellia.Duan 于 2024-7-24 15:16 编辑

image.png313423156.png



  1. <div>const inputData = [
  2.     { "leftParen": "", "column": "BID", "operator": "Equal", "type": "string", "value": "qq", "rightParen": "", "formula": "" },
  3.     { "relation": "and", "leftParen": "", "column": "BID", "operator": "Equal", "type": "boolean", "value": true, "rightParen": "", "formula": "" },
  4.     { "relation": "and", "leftParen": "", "column": "BID", "operator": "Equal", "type": "number", "value": 10, "rightParen": "", "formula": "" },
  5.     { "relation": "or", "leftParen": "", "column": "BID", "operator": "Equal", "type": "公式", "value": "12", "rightParen": "", "formula": "aa" },
  6.     { "relation": "and", "leftParen": "", "column": "BID", "operator": "Equal", "type": "number", "value": 110, "rightParen": "", "formula": "" }
  7. ];</div>
复制代码



我要自定义属性面板,数据过滤有没有api,我传入特定值后生成官方的数据格式进行设置和回显。上面的是自定义过滤弹窗组件得到的值,要转换成什么样的数据啊?

10 个回复

倒序浏览
eat_grape_5
高级会员   /  发表于:2024-7-4 11:56:12
沙发
本帖最后由 eat_grape_5 于 2024-7-4 12:11 编辑

报表中设置的过滤规则作用于模板单元格,可通过TemplateSheet:setTemplateCell()接口设置,可参考API文档:https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Report.TemplateSheet#settemplatecell
将自定义的过滤规则数据结构转换为TemplateCell对象中的filter属性值,包括过滤规则相关的列、多个子规则之间的逻辑关系、操作符等属性与官方API定义的属性对应起来即可生效。关于filter属性值IFilter的数据结构可参考官方文档:
https://demo.grapecity.com.cn/spreadjs/help/api/interfaces/GC.Spread.Report.IFilter
也可以在在线表格编辑器中设置一个报表模板,设置过滤规则,获取报表单元格了解其中的filter属性值数据结构。获取报表模板单元格的接口是TemplateSheet:getTemplateCell,可参考API文档:https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Report.TemplateSheet#gettemplatecell
官方文档也提供了报表数据过滤的demo,可参考:https://demo.grapecity.com.cn/spreadjs/help/docs/features/reportsheet/template-sheet-setting/filter-condition

评分

参与人数 1金币 +500 收起 理由
Joestar.Xu + 500 赞一个!

查看全部评分

回复 使用道具 举报
end..
注册会员   /  发表于:2024-7-4 15:07:54
板凳
eat_grape_5 发表于 2024-7-4 11:56
报表中设置的过滤规则作用于模板单元格,可通过TemplateSheet:setTemplateCell()接口设置,可参考API文档: ...

就是我需要将组件的值手动转化成setTemplateCell.filter的condition :
    {
      "and": [
        {
          "or": [
            {
              "and": [
                {
                  "value": "qq",
                  "column": "BID",
                  "operator": "Equal"
                },
                {
                  "value": true,
                  "column": "BID",
                  "operator": "Equal"
                },
                {
                  "value": 10,
                  "column": "BID",
                  "operator": "Equal"
                }
              ]
            },
            {
              "formula": "aa"
            }]
        },
        {
          "value": 110,
          "column": "BID",
          "operator": "Equal"
        }
      ],
    }
   这种格式吗
回复 使用道具 举报
eat_grape_5
高级会员   /  发表于:2024-7-4 15:41:26
地板
end.. 发表于 2024-7-4 15:07
就是我需要将组件的值手动转化成setTemplateCell.filter的condition :
    {
      "and": [

对的!就是遵照官方定义的接口参数回填参数属性,这样的话接口在收到参数后便能识别其中的属性,继续根据定义好的执行逻辑执行。
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-5 09:07:42
5#
eat_grape_5 发表于 2024-7-4 11:56
报表中设置的过滤规则作用于模板单元格,可通过TemplateSheet:setTemplateCell()接口设置,可参考API文档: ...

回复 使用道具 举报
end..
注册会员   /  发表于:2024-7-5 17:07:14
6#
eat_grape_5 发表于 2024-7-4 15:41
对的!就是遵照官方定义的接口参数回填参数属性,这样的话接口在收到参数后便能识别其中的属性,继续根据 ...

这个转换方法要怎么写啊?这个还有左右括号,要按照括号的优先顺序计算,实在写不出来
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-5 17:54:13
7#
您好,这一块的逻辑涉及SpreadJS的底层了,具体的算法这边也不清楚,无法给您提供支持。
回复 使用道具 举报
end..
注册会员   /  发表于:2024-7-8 09:03:03
8#
Joestar.Xu 发表于 2024-7-5 17:54
您好,这一块的逻辑涉及SpreadJS的底层了,具体的算法这边也不清楚,无法给您提供支持。

那可以帮忙提供一个demon演示下怎么用吗,这个IfilterApi怎么传递多个规则,  const inputData = [
    {
        "leftParen": "(((",
        "column": "BID",
        "operator": "Equal",
        "type": "string",
        "value": "qq",
        "rightParen": "",
        "formula": ""
    },
    {
        "relation": "and",
        "leftParen": "",
        "column": "BID",
        "operator": "Equal",
        "type": "boolean",
        "value": true,
        "rightParen": ")",
        "formula": ""
    },
    {
        "relation": "and",
        "leftParen": "",
        "column": "BID",
        "operator": "Equal",
        "type": "number",
        "value": 10,
        "rightParen": "))",
        "formula": ""
    },
    {
        "relation": "or",
        "leftParen": "",
        "column": "",
        "operator": "",
        "type": "公式",
        "value": "",
        "rightParen": "",
        "formula": "aa"
    }
];
这个我的组件获取到的数据,要怎么样转成设置过滤所需的数据啊?
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-7-8 17:33:13
9#
您好,使用代码设置过滤可以参考该链接中的代码:https://demo.grapecity.com.cn/sp ... /data-filter/purejs
回复 使用道具 举报
eat_grape_5
高级会员   /  发表于:2024-7-9 09:17:29
10#
end.. 发表于 2024-7-5 17:07
这个转换方法要怎么写啊?这个还有左右括号,要按照括号的优先顺序计算,实在写不出来

观察了下原生面板设置复杂过滤规则后产生的规则数据格式,发现:复杂过滤规则由多个过滤条件和逻辑关系运算符组合而成,所以想到思路如下:
自定义生成规则时便要考虑括号、逻辑关系运算符的优先级,设置三个分别存储已形成的过滤条件括号逻辑关系运算符,借用栈先进后出、后进先出的存取规则实现。
自定义面板实现过滤条件是比较复杂的,不过分析出来它的组成形式后就有方向了,楼主加油!
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 立即注册
返回顶部