请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册

QQ登录

只需一步,快速开始

路一直都在

注册会员

6

主题

18

帖子

58

积分

注册会员

积分
58
最新发帖
路一直都在
注册会员   /  发表于:2025-5-9 11:20  /   查看:55  /  回复:6
1金币
已知所查字段在第28个字段,如何能对应找出该字段实际的列号32

image.png277772521.png

在spreadjs中的表头如下
image.png672860107.png

6 个回复

倒序浏览
Wilson.Zhang
超级版主   /  发表于:2025-5-9 15:40:00
沙发
您好!以您提供的图示为例,如果数据28所在单元格是活动单元格,那可以通过Worksheet:getActiveColumn()获取活动列索引。

请教下您是如何查找的?您说到“所查字段在第28个字段”,那么,是以28还是“厚度”为查找关键字通过查找功能或者Worksheet:search()执行查找?查找结果中包含了查找目标所在单元格位置信息,据此可以进一步了解查找目标所在列索引。
回复 使用道具 举报
路一直都在
注册会员   /  发表于:2025-5-9 17:03:11
板凳
Wilson.Zhang 发表于 2025-5-9 15:40
您好!以您提供的图示为例,如果数据28所在单元格是活动单元格,那可以通过Worksheet:getActiveColumn()获 ...

我这里是想拿到第28个表头对应的实际开始列,即厚度列的实际开始列32,已通过其他方式获取到了,感谢回复
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:5 天前
地板
可以分享下的您的解决方案吗,这也有助于后面的小伙伴学习。
作为感谢会给您送上金币奖励。
回复 使用道具 举报
路一直都在
注册会员   /  发表于:5 天前
5#
Lynn.Dou 发表于 2025-5-12 12:10
可以分享下的您的解决方案吗,这也有助于后面的小伙伴学习。
作为感谢会给您送上金币奖励。

通过获取某行所有列的信息,然后将合并单元格进行合并后获取的,

/**
   * 获取指定行的所有单元格信息,包括合并单元格
   * @param {GC.Spread.Sheets.Workbook} spread - SpreadJS 工作簿实例
   * @param {number} rowIndex - 行索引(从 0 开始)
   * @param {number} [sheetIndex=0] - 工作表索引(默认为第一个工作表)
   * @returns {Array} 包含该行所有单元格信息的数组
   */
  function getRowCellsInfo(sheet, rowIndex) {
    const colCount = sheet.getColumnCount()
    const mergedRanges = sheet.getSpans(sheet.getRange(rowIndex, -1, 1, -1))
    const rowCellsInfo = []
    const processedCols = new Set() // 记录已处理的列,避免重复处理合并单元格

    for (let col = 0; col < colCount; col++) {
      // 跳过已处理的合并单元格列
      if (processedCols.has(col)) continue

      let cellInfo = {
        row: rowIndex,
        col: col,
        value: sheet.getValue(rowIndex, col),
        style: sheet.getStyle(rowIndex, col),
        isMerged: false,
        colSpan: 1, // 默认列跨度为1
        rowSpan: 1, // 默认行跨度为1
      }

      // 检查当前单元格是否在合并区域内
      for (let i = 0; i < mergedRanges.length; i++) {
        const mergedRange = mergedRanges

        // 判断单元格是否属于当前合并区域
        const isInMergedRange =
          rowIndex >= mergedRange.row &&
          rowIndex < mergedRange.row + mergedRange.rowCount &&
          col >= mergedRange.col &&
          col < mergedRange.col + mergedRange.colCount

        if (isInMergedRange) {
          cellInfo.isMerged = true
          cellInfo.colSpan = mergedRange.colCount
          cellInfo.rowSpan = mergedRange.rowCount

          // 只在合并区域的起始单元格记录值和样式
          if (rowIndex === mergedRange.row && col === mergedRange.col) {
            cellInfo.value = sheet.getValue(mergedRange.row, mergedRange.col)
            cellInfo.style = sheet.getStyle(mergedRange.row, mergedRange.col)
          } else {
            // 非起始单元格设为 null,表示该单元格是合并单元格的一部分
            cellInfo.value = null
            cellInfo.style = null
          }

          // 标记合并区域内的所有列都已处理
          for (let c = mergedRange.col; c < mergedRange.col + mergedRange.colCount; c++) {
            processedCols.add(c)
          }

          break
        }
      }

      // 只添加有值的单元格(合并单元格的起始单元格)
      // if (cellInfo.value !== null) {
      rowCellsInfo.push(cellInfo)
      // }
    }

    return rowCellsInfo
  }

评分

参与人数 1金币 +100 收起 理由
Lynn.Dou + 100 很给力!

查看全部评分

回复 使用道具 举报
路一直都在
注册会员   /  发表于:5 天前
6#
路一直都在 发表于 2025-5-12 14:38
通过获取某行所有列的信息,然后将合并单元格进行合并后获取的,

/**

结果如下:   可以获取到第n个字段的其实列为 rowCellsInfo[n].col   
[
    {
        "row": 4,
        "col": 0,
        "value": "5",
        "isMerged": true,
        "colSpan": 3,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 3,
        "value": "5",
        "isMerged": true,
        "colSpan": 7,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 10,
        "value": "5",
        "isMerged": true,
        "colSpan": 5,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 15,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 19,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 23,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 27,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 31,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 35,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 39,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 43,
        "value": 5,
        "isMerged": true,
        "colSpan": 3,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 46,
        "value": "5",
        "isMerged": true,
        "colSpan": 4,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 50,
        "value": "E11-CNB03-5",
        "isMerged": true,
        "colSpan": 10,
        "rowSpan": 1
    },
    {
        "row": 4,
        "col": 60,
        "value": "5",
        "isMerged": true,
        "colSpan": 9,
        "rowSpan": 1
    }
]
回复 使用道具 举报
Lynn.Dou讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:5 天前
7#
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部