找回密码
 立即注册

QQ登录

只需一步,快速开始

pele

注册会员

12

主题

30

帖子

194

积分

注册会员

积分
194
pele
注册会员   /  发表于:2024-12-6 15:31  /   查看:96  /  回复:5
1金币
本帖最后由 Wilson.Zhang 于 2024-12-9 09:00 编辑

产品:SpreadJS
版本:17.1.10
调研编号:SJS-27688
Last Review:2024-12-09
当前进展:非功能问题,设计使然。需使用绝对引用。

简单过滤需求:

字符长度大于2小于10

        sheet.setValue(0, 1, '名称', GC.Spread.Sheets.SheetArea.colHeader);
        sheet.setValue(0, 1, '中华人民共和国');
        sheet.setValue(1, 1, '工程');
        sheet.setValue(2, 1, '生产项目');
        sheet.setValue(3, 1, '科技人');
        sheet.setValue(4, 1, '生产');
        sheet.setValue(5, 1, '工程项目');
        sheet.setValue(6, 1, '数字化');



        var range = new GC.Spread.Sheets.Range(0, 1, 7, 1);
        sheet.rowFilter(new GC.Spread.Sheets.Filter.HideRowFilter(range));



            var nCondition = new GC.Spread.Sheets.ConditionalFormatting.Condition(
                GC.Spread.Sheets.ConditionalFormatting.ConditionType.formulaCondition,
                {
                    formula: "=AND(LENB(B1)>2, LENB(B1)<10)",
                    customValueType: GC.Spread.Sheets.ConditionalFormatting.CustomValueType.formula
                }
            );
            filter.addFilterItem(1, nCondition);
            filter.filter(1);
执行结果如下:
image.png129429625.png
另外我想过滤字符长度大于2小于10,并且字符串中包含'工程',公式应该怎么写?
谢谢!




image.png733405761.png
image.png383969115.png

最佳答案

查看完整内容

您好!经调研,了解到SpreadJS在过滤器的公式中支持使用绝对引用和相对引用。您的公式”=AND(LENB(B1)>2, LENB(B1)2, LENB($B1)

5 个回复

倒序浏览
最佳答案
最佳答案
Wilson.Zhang
超级版主   /  发表于:2024-12-6 15:31:43
来自 3#
本帖最后由 Wilson.Zhang 于 2024-12-9 09:25 编辑

您好!经调研,了解到SpreadJS在过滤器的公式中支持使用绝对引用和相对引用。您的公式”=AND(LENB(B1)>2, LENB(B1)<10)“中的单元格引用正是相对引用,公式中的相对引用B1被解析为基准行列,从过滤范围中获取值时将以此为基准偏移,即将偏移至C1执行过滤。如果您需要过滤B列数据,可以将您公式中的单元格引用调整为绝对引用,即”=AND(LENB($B1)>2, LENB($B1)<10)“。

对于您的整体过滤需求,可使用如下公式过滤:
  1. =AND(AND(LEN($B1)>2, LEN($B1)<10), ISNUMBER(FIND("工程", $B1)))
复制代码

如下动图所示,点击左上角的”Filter“按钮,将对B列数据按照长度大于2且小于10同时包含”工程“二字的文本进行过滤,筛选结果为”工程项目“。
公式筛选.gif

另外,您可以参考官网文档了解单元格引用模式的细节:
https://demo.grapecity.com.cn/spreadjs/help/docs/formulareference/formulaoverview/cellreferences#%E7%9B%B8%E5%AF%B9%E5%92%8C%E7%BB%9D%E5%AF%B9
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-12-6 16:51:41
2#
本帖最后由 Wilson.Zhang 于 2024-12-6 16:56 编辑

您好!使用您提供的代码复现了问题,同时发现如果将公式中的单元格引用由B1修改为A1即可正常筛选。针对这个使用问题,调研后会及时向您同步结论,请您耐心等待,调研编号为SJS-27688。

您可以先参考上述使用方式使用,如果需要同时筛选包括“工程”二字的条目,可以再叠加一个AND条件语句,参考如下代码:
  1. var nCondition = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  2.     GC.Spread.Sheets.ConditionalFormatting.ConditionType.formulaCondition,
  3.     {
  4.         formula: '=AND(AND(LEN(A1)>2, LEN(A1)<10), ISNUMBER(FIND("工程", A1)))',
  5.         customValueType: GC.Spread.Sheets.ConditionalFormatting.CustomValueType.formula
  6.      }
  7. );
复制代码
回复 使用道具 举报
pele
注册会员   /  发表于:2024-12-9 10:00:09
4#
Wilson.Zhang 发表于 2024-12-9 08:59
您好!经调研,了解到SpreadJS在过滤器的公式中支持使用绝对引用和相对引用。您的公式”=AND(LENB(B1)>2, L ...

解释的很清晰,问题解决,非常感谢!
回复 使用道具 举报
Joestar.XuSpreadJS 开发认证
超级版主   /  发表于:2024-12-9 10:21:26
5#
好的,那就先结贴了,后续有其他问题的话随时开新帖提问哈。
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-12-9 17:17:16
6#
pele 发表于 2024-12-9 10:00
解释的很清晰,问题解决,非常感谢!

不客气。如有新问题,欢迎发新帖沟通。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部