找回密码
 立即注册

QQ登录

只需一步,快速开始

黑暗骑士

注册会员

3

主题

12

帖子

119

积分

注册会员

积分
119
最新发帖
黑暗骑士
注册会员   /  发表于:2017-6-20 17:32  /   查看:4426  /  回复:8
筛选框可以用,但是排序功能点的时候没反应,  代码如下  请版主解答  看了一下午也没弄出来
initSpread=()=>{
  let spread = this.spread;
  if(!_.isEmpty(this.state.spreadData)) {

    let data = _.cloneDeep(this.state.spreadData.content);
    let direction = GcSpread.Sheets.RangeGroupDirection.Backward;
    this.initGroup(spread, data, direction,this.state.spreadData.frozenCol,this.state.spreadData.frozenRow);
    spread.showVerticalScrollbar(true);
    spread.tabNavigationVisible(false);
    spread.tabStripVisible(false);
    spread.showHorizontalScrollbar(true);
    spread.grayAreaBackColor('white');
    spread.showScrollTip(GcSpread.Sheets.ShowScrollTip.Horizontal);
    this.spreadProtected(spread);
    this.setState({
      dataReady:true
    })
  }else{
    //spread.fromJSON(this.state.spreadData || '');
    spread.showVerticalScrollbar(true);
    spread.showHorizontalScrollbar(true);
    spread.grayAreaBackColor('white');
    spread.showScrollTip(GcSpread.Sheets.ShowScrollTip.Horizontal);
    this.spreadProtected(spread);
  }
}

spreadProtected=(spread)=> {
  let activeSheet = spread.getActiveSheet();
  activeSheet.setIsProtected(true);
  activeSheet.protectionOption({
    allowResizeRows: true,
    allowResizeColumns: true,
    allowFilter:true,
    allowSort:true,
    allowEditObjects:false
  });
}

initGroup=(spread,data,direction,frozenCol,frozenRow)=> {
  let sheets = data.sheets;
  let self = this;
  let sheetItem = _.values(sheets)[0;
  let rows = sheetItem.rows; //取sheets对象里面的第一个value值
  let rowNum = sheetItem.rowCount;
  let firstHide = "",lastHide="",groupShow={};

  //sheet.showRowRangeGroup(true);
  rows.map(function (row,index) {
    if(row.visible){//如果是可见的。判断是否有一个不可以见的作为开头,若没有则继续遍历,如果有则需要一个结尾
      if(firstHide){
        lastHide = index;
      }
    }else{//如果不可见,判断是否有不可见的作为开头,没有就将此作为开头
      if(!firstHide){
        firstHide = index;
      }
      if(index == rows.length-1){
        lastHide = index+1;
      }
      row.visible=true;
      row.size=21;
    }
    if(firstHide&&lastHide){
      //sheet.rowRangeGroup.group(firstHide+1, lastHide-firstHide);
      groupShow[firstHide] = lastHide-firstHide;
      //sheet.rowRangeGroup.group(3, 5);
      //console.log("隐藏",firstHide+1, lastHide)
      firstHide = "";
      lastHide = "";
    }
  });
  spread.fromJSON(data);
  let sheet = spread.getActiveSheet();
  sheet.setRowHeaderVisible(false);
  sheet.setColumnHeaderVisible(false);
  sheet.rowRangeGroup.setDirection(direction);
  sheet.isPaintSuspended(true);


  //设置自动换行
  for(let i=0 ; i<rowNum ; i++){
    sheet.getRow(i).wordWrap(true);
    sheet.autoFitRow(i);
  }
  for(let i in groupShow){
    //console.log(i,groupShow)
    sheet.rowRangeGroup.group(parseInt(i), parseInt(groupShow[i));
  }
  if(frozenCol != undefined){
    sheet.setFrozenColumnCount(frozenCol);
  }
  if(frozenRow != undefined){
    sheet.setFrozenRowCount(frozenRow);
  }
  this.setFilter(sheet,_.values(sheets)[0,frozenRow);
  sheet.isPaintSuspended(false);
  sheet.bind("CellClick", function(a,b,c,d,args) { // sheet event
    if(b.col<2){
     // message.warning('请选择有效单元格!');
      return;
    }
    if(b.row){
      let po = {
        date:self.state.date,
        col:b.col,
        row:b.row,
        dataTable:sheetItem.data.dataTable
      }
      self.setState({
        showOpt:true,
        detailPo:po
      })
    }
  });
}

setFilter=(activeSheet,data,frozenRow)=>{
  let rowCount = data.rowCount,
    colCount = data.columnCount;
  var cfs = activeSheet.getConditionalFormats();
  console.log('activeSheet data frozenRow',activeSheet,data,frozenRow,cfs);

  let cellrange =new GcSpread.Sheets.Range(frozenRow||1, 1, rowCount-(frozenRow||1), colCount-1);
  let hideRowFilter =new GcSpread.Sheets.HideRowFilter(cellrange);
  let rowFilter = activeSheet.rowFilter(hideRowFilter);

}

8 个回复

倒序浏览
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-6-20 17:59:52
沙发
您好,您能提供一个完整的demo,这样我们能够通过demo进行调试(目前根据您的代码,没办法跑起来,所以也没办法具体定位问题)。
回复 使用道具 举报
黑暗骑士
注册会员   /  发表于:2017-6-20 18:04:40
板凳
ClarkPan 发表于 2017-6-20 17:59
您好,您能提供一个完整的demo,这样我们能够通过demo进行调试(目前根据您的代码,没办法跑起来,所以也没 ...

版主大大  我这个使用在react上的,而且他的数据也是配合后台的 所以 没发给你全部(因为给你全部了 你也跑不起来)  而且我发的代码也是关于spreadjs 全部的了
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-6-21 10:29:02
地板
本帖最后由 ClarkPan 于 2017-6-21 10:32 编辑

看了您的代码,跟筛选有关的逻辑就是添加了冻结行,然后在冻结行之后进行筛选,因为您的代码无法完整运行,我也只能根据大致逻辑仿写一个demo进行问题重现,但是没有重现出问题,以下是我写的demo,您可以进行参考。

frozenfilter.zip

1005 Bytes, 下载次数: 85

回复 使用道具 举报
黑暗骑士
注册会员   /  发表于:2017-6-22 12:37:19
5#
ClarkPan 发表于 2017-6-21 10:29
看了您的代码,跟筛选有关的逻辑就是添加了冻结行,然后在冻结行之后进行筛选,因为您的代码无法完整运行, ...

我已经知道 为什么我的排序不能用了  谢谢了
回复 使用道具 举报
黑暗骑士
注册会员   /  发表于:2017-6-22 12:37:34
6#
ClarkPan 发表于 2017-6-21 10:29
看了您的代码,跟筛选有关的逻辑就是添加了冻结行,然后在冻结行之后进行筛选,因为您的代码无法完整运行, ...

我已经知道 为什么我的排序不能用了  谢谢了
回复 使用道具 举报
黑暗骑士
注册会员   /  发表于:2017-6-22 12:43:11
7#
ClarkPan 发表于 2017-6-21 10:29
看了您的代码,跟筛选有关的逻辑就是添加了冻结行,然后在冻结行之后进行筛选,因为您的代码无法完整运行, ...

不过 我这个又出现了一个新的问题  就是我的排序功能,排序出来的效果不正确 很奇怪  

排序结果不正确

排序结果不正确
回复 使用道具 举报
黑暗骑士
注册会员   /  发表于:2017-6-22 12:45:44
8#
黑暗骑士 发表于 2017-6-22 12:43
不过 我这个又出现了一个新的问题  就是我的排序功能,排序出来的效果不正确 很奇怪

希望管理大大能看下  如果不知道什么原因 可不可能告诉我有什么参数能把  筛选和排序面板中的 升序和降序两个按钮区去掉
回复 使用道具 举报
Clark.Pan讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2017-6-22 14:50:39
9#
黑暗骑士 发表于 2017-6-22 12:45
希望管理大大能看下  如果不知道什么原因 可不可能告诉我有什么参数能把  筛选和排序面板中的 升序和降序 ...

您好您单元格的格式应该设置的是文本的格式,这样排序会按照字符串形式进行排序
因为您这边是百分比显示,你可以将您单元格的格式设置为0.00%
类似这样:sheet.setFormatter(-1, 0, '0.00%');
然后单元格输入的数字将会转换为百分比显示,这样排序时仍然会按照数字进行排序。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部