找回密码
 立即注册

QQ登录

只需一步,快速开始

迎风沐雨

注册会员

1

主题

3

帖子

8

积分

注册会员

积分
8
  • 24

    金币

  • 1

    主题

  • 3

    帖子

最新发帖
迎风沐雨
注册会员   /  发表于:2024-8-30 16:51  /   查看:583  /  回复:5
cdcc0fbd90f2b9f6cc95ddd5d37039f.png157919921.png
需求时想根据填充的数据行数来复制填充对应行数的公式列数据,表格要做保护,用了isProtected
问题是不用isProtected使用getUsedRange能获取到对应的数据行数
如上图所示,填充了很多行,但是使用curSheet.getUsedRange(GC.Spread.Sheets.UsedRangeType.all)获取时,rowCount变成-1;各位大佬有什么方法能获取到正确的填充数据行数吗?

代码如下,求大佬解惑
if(Array.isArray(sheetNames) && sheetNames.length){
      for (let i = 0; i < sheetNames.length; i++) {
        let curSheet = spread.getSheetFromName(sheetNames[i])
        if(curSheet){
          curSheet.options.protectionOptions = protectOption
          curSheet.options.isProtected = false;
          console.log("isProtected",curSheet.options.isProtected,curSheet.options.protectionOptions)
          console.log("curSheet>>>>>>",sheetNames[i],curSheet)
          let curRange = curSheet.getUsedRange(GC.Spread.Sheets.UsedRangeType.all)
          let colCount = curRange.colCount
          let rowCount = curRange.rowCount
          console.log("Count",colCount,rowCount,curRange)
          for (let j = 0; j < colCount; j++) {
            console.log(formula,formula.includes(j),j)
            if(!formula.includes(j+1)){
              // curSheet.setStyle(-1,j,styleLock,GC.Spread.Sheets.SheetArea.viewport)
              // curSheet.setStyle(-1,j,unLockStyle,GC.Spread.Sheets.SheetArea.viewport)
              const cell = curSheet.getValue(1, j);
              console.log(formula[i],2,j,cell)
              // console.log(curSheet.getValue(1, 3),curSheet.getValue(2, 3))
              if(cell){
                let curFormal = curSheet.getFormula(1,j,GC.Spread.Sheets.SheetArea.viewport)
                console.log("cellFormal",curFormal)
                curSheet.setFormula(1,j,curFormal)
                console.log("cellFormal",curFormal)
                // curSheet.setStyle(1,j,styleLock,GC.Spread.Sheets.SheetArea.viewport)
                for (let k = 2; k < rowCount; k++) {
                  curSheet.copyTo(1,j,k,j,1,1,GC.Spread.Sheets.CopyToOptions.all)
                  console.log("copy getValue>>>>>>>>>>>>>>",curSheet.getValue(k,j))
                  // let curStyle = curSheet.getStyle(k,j,GC.Spread.Sheets.SheetArea.viewport)
                  // curStyle.locked = true;
                  // curStyle.backColor = '#F4F8EB';
                  // curSheet.getCell(k,j).locked(true)
                }
                curSheet.setStyle(-1,j,styleLock,GC.Spread.Sheets.SheetArea.viewport)
              }else{
                console.log(j+"列非单元格无数据+++++++++++++++++++++++++++++++++++++++++++++++++")
              }
            }else{
              console.log(j+"列非公式列+++++++++++++++++++++++++++++++++++++++++++++++++")
              // curSheet.setStyle(-1,j,unLockStyle,GC.Spread.Sheets.SheetArea.viewport)
            }
          }
          curSheet.options.isProtected = true;
        }
      }
    }




8b5c9aa4bb58987a98cfcc28682611b.png324843444.png

5 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2024-8-30 17:49:36
沙发
您好!当您通过Worksheet:getUsedRange()获取到rowCount为-1时,代表Worksheet内所有行,此时,您可以通过Worksheet:getRowCount()获取Worksheet内总行数,得到行数便可以定义您的业务逻辑。如果未使用Worksheet内所有行,通过Worksheet:getUsedRange()可以得到确切的rowCount值。
回复 使用道具 举报
迎风沐雨
注册会员   /  发表于:2024-8-30 18:02:03
板凳
Wilson.Zhang 发表于 2024-8-30 17:49
您好!当您通过Worksheet:getUsedRange()获取到rowCount为-1时,代表Worksheet内所有行,此时,您可以通过W ...

大佬,我的业务逻辑是获取worksheet使用的行数,使用了isProtected,就获取不到确切的rowCount,只能拿到-1,有没有其他方式可以获取worksheet中使用的行数吗?
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-8-30 18:07:30
地板
迎风沐雨 发表于 2024-8-30 18:02
大佬,我的业务逻辑是获取worksheet使用的行数,使用了isProtected,就获取不到确切的rowCount,只能拿到- ...

可以在获取前先解开表单保护,获取后再保护表单。
回复 使用道具 举报
迎风沐雨
注册会员   /  发表于:2024-9-2 09:54:22
5#
感谢大佬,问题已解决
回复 使用道具 举报
Wilson.Zhang
超级版主   /  发表于:2024-9-2 10:59:07
6#
迎风沐雨 发表于 2024-9-2 09:54
感谢大佬,问题已解决

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