基于Luckysheet表格开发的一些功能

1.针对当前sheet页面单元格一键N/A
 

 setNA(type) {
      this.setTestIsNullCell()
      // 获取当前激活的工作表信息
      const currentSheet = luckysheet.getSheet();
      const currentOrder = Number(currentSheet.order);
      // 一键N/A
      for (let key in this.testIsNullCell) {
        for (let i = 0; i < this.testIsNullCell[key].length; i++) {
          let cellValue = '1'
          try { 
            if( type === 'sheet' && currentOrder === this.testIsNullCell[key][i].order)  {
              cellValue = luckysheet.getCellValue(this.testIsNullCell[key][i].r, this.testIsNullCell[key][i].c, { order: this.testIsNullCell[key][i].order })
            } else if( type === 'allSheet' ) {
              cellValue = luckysheet.getCellValue(this.testIsNullCell[key][i].r, this.testIsNullCell[key][i].c, { order: this.testIsNullCell[key][i].order })
            }
          } catch (error) {
            // console.log(error)
          }
          if (this.testIsNullCell[key][i].isNA && cellValue!==0 && !cellValue) {
            luckysheet.setCellValue(this.testIsNullCell[key][i].r, this.testIsNullCell[key][i].c, "N/A", { order: this.testIsNullCell[key][i].order })
          }
        }
      }
    }

 


2、单元格必填校验

if (testIsNullCell[key][i].isRequired && !value && value !== 0 && this.cellIsExist(testIsNullCell[key][i].order,testIsNullCell[key][i].r,testIsNullCell[key] [i].c)) {
  luckysheet.setCellFormat(testIsNullCell[key][i].r, testIsNullCell[key][i].c, "bg", "#ff0000", { order: testIsNullCell[key][i].order })
  existArray.push({
    sheetName: excelData[Number(key.slice(5))].name,
    position: this.getCellAddress(testIsNullCell[key][i].r, testIsNullCell[key][i].c),
  })
  existData = false
} else {
  value && luckysheet.setCellFormat(testIsNullCell[key][i].r, testIsNullCell[key][i].c, "bg", "#ffffff", { order: testIsNullCell[key][i].order })
}

 

3、验证单元格是否存在

    cellIsExist(order,row,col) {
      try {
        const sheet = luckysheet.getSheet({ order });
        // 检查基础条件
        if (!sheet || !sheet.data) {
          return false;
        }
        
        // 检查行列索引是否在有效范围内
        if (row < 0 || row >= sheet.data.length || col < 0 || col >= sheet.data[0].length) {
          return false;
        }
        
        // 检查单元格是否存在
        if (!sheet.data[row] || !sheet.data[row][col]) {
          return false;
        }
        
        // 如果是合并单元格,检查是否为合并区域的起始单元格
        if (sheet.data[row][col].mc) {
          return sheet.data[row][col].mc.r === row && sheet.data[row][col].mc.c === col;
        }
        
        // 非合并单元格直接返回true
        return true;
      } catch (error) {
        console.error('检查单元格存在性时出错:', error);
        return false;
      }
    }

 


4、全屏模式(伪全屏)

requestFullScreen() {
      this.$modal
        .confirm('全屏模式会获取最新数据,请确认当前页面数据是否已保存?')
        .then(()=> {
          const tagsView = document.getElementById('tags-view-container')
          const wrap = document.getElementById('wrap')
          const fixedHeader =  document.getElementsByClassName('fixed-header')[0]
          const appMain = document.getElementsByClassName('app-main ')[0]
          const sidebarContainer = document.getElementsByClassName('sidebar-container')[0]
          const mainContainer =  document.getElementsByClassName('main-container')[0]
          this.sidebarContainerWidth = sidebarContainer.offsetWidth + 'px'
          tagsView.style.display = 'none'
          fixedHeader.style.display = 'none'
          sidebarContainer.style.display = 'none'
          appMain.style.paddingTop = '0'
          mainContainer.style.marginLeft = '0'
          wrap.style.height = 'calc(100vh - 10px)'
          if (document.documentElement.requestFullscreen) {
            document.documentElement.requestFullscreen();
          } else if (document.documentElement.mozRequestFullScreen) {        /* Firefox */
            document.documentElement.mozRequestFullScreen();
          } else if (document.documentElement.webkitRequestFullscreen) {   /* Chrome, Safari & Opera */
            document.documentElement.webkitRequestFullscreen();
          } else if (document.documentElement.msRequestFullscreen) {       /* IE/Edge */
            document.documentElement.msRequestFullscreen();
          }
          this.getData()
          document.addEventListener('fullscreenchange', this.handleFullScreenChange);
          document.addEventListener('mozfullscreenchange', this.handleFullScreenChange); // Firefox
          document.addEventListener('webkitfullscreenchange', this.handleFullScreenChange); // Chrome, Safari and Opera
          document.addEventListener('MSFullscreenChange', this.handleFullScreenChange); // IE/Edge
        })
        .catch((error)=> {
          console.log(error)
        });
    }

 


5、重新设置单元格数据验证

  setTestIsNullCell() {
      let sheets = luckysheet.getAllSheets();
      const currentOrder = sheets.map(s => s.index);
      if (JSON.stringify(this.previousSheetOrder) !== JSON.stringify(currentOrder)) {
        // console.log('Sheet顺序发生变化');
        this.previousSheetOrder = currentOrder;
        this.testIsNullCell = {}
        for (let i = 0; i < sheets.length; i++) {
          if (sheets[i].config.extraCustomCellConfigs) {
            for(let l = 0; l < sheets[i].config.extraCustomCellConfigs.testIsNullCell.length; l++ ) {
              sheets[i].config.extraCustomCellConfigs.testIsNullCell[l].order = i
            }
            this.testIsNullCell['order' + i] = sheets[i].config.extraCustomCellConfigs.testIsNullCell
          }
        }
      }
      sheets = null
    }

 

posted @ 2026-07-30 11:51  zouTuring  阅读(0)  评论(0)    收藏  举报