找回密码
 立即注册

QQ登录

只需一步,快速开始

dl0537

注册会员

5

主题

27

帖子

130

积分

注册会员

积分
130

微信认证勋章

dl0537
注册会员   /  发表于:2019-12-5 08:41  /   查看:3586  /  回复:7
100金币
关于SpreadJs的筛选,按照之前的做法(需要筛选的区域数据是做在模板中,在加载画面时,在Js侧动态加载筛选功能)中,能够实现筛选功能以及默认选中指定内容。
但是随着客户需求的变更,要求筛选区域的数据是动态加载的,在加载完之后加入筛选功能,并设定默认表示区域。在这种情况下,默认选中的功能却实现不了了,希望各位大神能够提供帮助。
代码如下


  1.         <script type="text/javascript">
  2.         $(document).ready(function(){
  3.         var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss"));
  4.         $("#test1").click(function(){
  5.         var sheet = workbook.getSheetFromName("Sheet1");
  6.         sheet.setValue(3,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);
  7.         sheet.setValue(4,3,"BBBBB",GC.Spread.Sheets.SheetArea.viewport);
  8.         sheet.setValue(5,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);
  9.         sheet.setValue(6,3,"CCCCC",GC.Spread.Sheets.SheetArea.viewport);
  10.         sheet.setValue(7,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);

  11.         var tableStyle = GC.Spread.Sheets.Tables.TableThemes.light1;

  12.         var table = sheet.tables.add("hello",2,3,6,1,tableStyle);

  13.         var rowfilter = sheet.tables.findByName("hello").rowFilter();
  14.         rowfilter.filterDialogVisibleInfo({
  15.         sortByValue: false,
  16. sortByColor: false,
  17.         filterByColor:false,
  18.         filterByValue: false,
  19.         listFilterArea:true
  20.         });

  21.         var tableRowfilter = sheet.tables.findByName("hello").rowFilter();
  22.         var condition = new GC.Spread.Sheets.ConditionalFormatting.Condition(GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition,{
  23.         compareType:0,
  24.         conType:2,
  25.         expected:"AAAAA",
  26.         useWildCards:false
  27.         });

  28.         var condition1 = new GC.Spread.Sheets.ConditionalFormatting.Condition(GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition,{
  29.         compareType:0,
  30.         conType:2,
  31.         expected:"CCCCC",
  32.         useWildCards:false
  33.         });

  34.         tableRowfilter.addFilterItem(0,condition);
  35.         tableRowfilter.addFilterItem(0,condition1);
  36.         tableRowfilter.filter(0);

  37. workbook.refresh();

  38.         });
  39.         });
  40.         </script>
复制代码


想实现的功能是,在点击test1按钮时,现在指定单元格赋值,之后再给指定区域追加筛选功能,最后设定默认选中“AAAAA”和“CCCCC”

最佳答案

查看完整内容

两个错误: 1、var filter = sheet.tables; 这句。。。我改了,如下列代码所示。 2、addFilterItem第一个参数是列标,根据你的代码,传3就好,完整代码如下:

7 个回复

倒序浏览
最佳答案
最佳答案
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-12-5 08:41:54
来自 6#
两个错误:

1、var filter = sheet.tables; 这句。。。我改了,如下列代码所示。
2、addFilterItem第一个参数是列标,根据你的代码,传3就好,完整代码如下:

  1. var spread = GC.Spread.Sheets.findControl("ss");
  2.                               
  3. var sheet = spread.getActiveSheet();

  4. sheet.setValue(3,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);
  5. sheet.setValue(4,3,"BBBBB",GC.Spread.Sheets.SheetArea.viewport);
  6. sheet.setValue(5,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);
  7. sheet.setValue(6,3,"CCCCC",GC.Spread.Sheets.SheetArea.viewport);
  8. sheet.setValue(7,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);

  9. var tableStyle = GC.Spread.Sheets.Tables.TableThemes.light1;

  10. var table = sheet.tables.add("hello",2,3,6,1,tableStyle);

  11. // 这里可以通过table.rowFilter拿到正确的筛选器
  12. var filter = table.rowFilter();

  13. // 创建条件
  14. var nCondition_1 = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  15.     GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition);
  16. nCondition_1.compareType(GC.Spread.Sheets.ConditionalFormatting.TextCompareType.equalsTo);
  17. nCondition_1.expected("AAAAA");

  18. // 创建条件
  19. var nCondition_2 = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  20.     GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition);
  21. nCondition_2.compareType(GC.Spread.Sheets.ConditionalFormatting.TextCompareType.equalsTo);
  22. nCondition_2.expected("CCCCC");

  23. // 第一个参数是列标
  24. filter.addFilterItem(3, nCondition_1);
  25. filter.addFilterItem(3, nCondition_2);

  26. filter.filter(3);
复制代码
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-12-5 14:05:00
2#
您好,想指定默认选中的区域,可以用addSelection来实现,参考API:

https://demo.grapecity.com.cn/sp ... t~addSelection.html
回复 使用道具 举报
dl0537
注册会员   /  发表于:2019-12-5 19:30:00
3#
谢谢回答,我们的需求不是要指定选中区域,想做的效果是实现筛选之后,并且按照指定的条件进行了筛选。但是我提供的那版代码实现不了按照指定条件进行筛选的效果
回复 使用道具 举报
KevinChen讲师达人认证 悬赏达人认证 SpreadJS 开发认证
论坛元老   /  发表于:2019-12-6 14:14:42
4#
您好,抱歉上次理解错了你的意思,实际上这里就是需要用代码设置一下筛选条件,并执行筛选。

在学习指南的这个示例中:

https://demo.grapecity.com.cn/sp ... ilter-dialog/purejs

你把这个示例下载到本地,然后执行以下代码就可以实现你的需求:

  1. var spread = GC.Spread.Sheets.findControl("ss");
  2. var sheet = spread.getActiveSheet();
  3. var filter = sheet.rowFilter();

  4. // 创建条件
  5. var nCondition_1 = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  6.     GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition);
  7. nCondition_1.compareType(GC.Spread.Sheets.ConditionalFormatting.TextCompareType.equalsTo);
  8. nCondition_1.expected("Dafna");

  9. // 创建条件
  10. var nCondition_2 = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  11.     GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition);
  12. nCondition_2.compareType(GC.Spread.Sheets.ConditionalFormatting.TextCompareType.equalsTo);
  13. nCondition_2.expected("Michelle");


  14. filter.addFilterItem(1, nCondition_1);
  15. filter.addFilterItem(1, nCondition_2);

  16. filter.filter(1);
复制代码
回复 使用道具 举报
dl0537
注册会员   /  发表于:2019-12-6 16:47:26
5#
KevinChen 发表于 2019-12-6 14:14
您好,抱歉上次理解错了你的意思,实际上这里就是需要用代码设置一下筛选条件,并执行筛选。

在学习指南 ...

非常感谢你的帮助,不过这边因为要在一个Sheet中的不同区域分别做筛选,之前在网上查过在这种情况下只能用sheet.tables来做,但是用你提供的方法在addFilterItem时会报错。
请问如果用tables来做筛选的话因该如何实装
下边是我按照你提供的代码按照tables做了修改之后的代码
  1. var spread = GC.Spread.Sheets.findControl("ss");
  2.                                
  3.                                 var sheet = workbook.getSheetFromName("Sheet1");
  4.                                 sheet.setValue(3,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);
  5.                                 sheet.setValue(4,3,"BBBBB",GC.Spread.Sheets.SheetArea.viewport);
  6.                                 sheet.setValue(5,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);
  7.                                 sheet.setValue(6,3,"CCCCC",GC.Spread.Sheets.SheetArea.viewport);
  8.                                 sheet.setValue(7,3,"AAAAA",GC.Spread.Sheets.SheetArea.viewport);
  9.                                
  10.                                 var tableStyle = GC.Spread.Sheets.Tables.TableThemes.light1;
  11.                                
  12.                                 var table = sheet.tables.add("hello",2,3,6,1,tableStyle);

  13. var sheet = spread.getActiveSheet();
  14. var filter = sheet.tables;

  15. // 创建条件
  16. var nCondition_1 = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  17.     GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition);
  18. nCondition_1.compareType(GC.Spread.Sheets.ConditionalFormatting.TextCompareType.equalsTo);
  19. nCondition_1.expected("AAAAA");

  20. // 创建条件
  21. var nCondition_2 = new GC.Spread.Sheets.ConditionalFormatting.Condition(
  22.     GC.Spread.Sheets.ConditionalFormatting.ConditionType.textCondition);
  23. nCondition_2.compareType(GC.Spread.Sheets.ConditionalFormatting.TextCompareType.equalsTo);
  24. nCondition_2.expected("CCCCC");


  25. filter.addFilterItem(1, nCondition_1);
  26. filter.addFilterItem(1, nCondition_2);

  27. filter.filter(1);
复制代码
回复 使用道具 举报
dl0537
注册会员   /  发表于:2019-12-6 17:34:03
7#
KevinChen 发表于 2019-12-6 17:19
两个错误:

1、var filter = sheet.tables; 这句。。。我改了,如下列代码所示。

终于知道问题出在什么地方了,是在addFilterItem时第一个参数应该是筛选所在列,但是我的代码中指定的并不是所筛选的那一列。
关于筛选真不是很了解,真心非常感谢~~~
给你加个鸡腿
回复 使用道具 举报
Fiooona
论坛元老   /  发表于:2019-12-6 17:51:55
8#
  可以给上方版主评分,5分为非常满意
组件化表格编辑器(预览版)试用进行中,点击了解详情!
请点击评分,对我的服务做出评价!5分为非常满意!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部