You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Smartsheet字段名以实现Apps Script与Google Sheets集成?

解决Smartsheet数据拉取到Google Sheets的字段名问题

核心问题分析

  • API响应结构误判:Smartsheet Sheets API的响应里,行数据存储在rows字段,而非你代码里的records,这会导致speakers为空或undefined。
  • 特殊属性名引用错误:E-Number包含连字符,不能用点语法(fields.E-Number)访问,JS会将其解析成减法运算,必须用方括号语法。
  • 数据结构理解偏差:Smartsheet返回的行数据中,单元格是cells数组,每个cell通过columnId关联列,不是直接以列名为属性的fields对象。

修正后的完整代码

function getSpeakers() {
  // 获取Smartsheet数据及列映射
  const { rows, columnMap } = requestsmartsheet();
  const speakerInfo = [];

  // 遍历每一行,根据列名提取数据
  rows.forEach(row => {
    // 构建当前行的字段映射
    const rowFields = {};
    row.cells.forEach(cell => {
      const columnName = columnMap[cell.columnId];
      if (columnName) {
        rowFields[columnName] = cell.value;
      }
    });

    // 按需求提取字段,注意特殊字段用方括号
    speakerInfo.push([
      rowFields.FirstName,
      rowFields.LastName,
      rowFields.Email,
      rowFields['E-Number']
    ]);
  });

  console.log("speaker_info: ", speakerInfo);
  // 可选:将数据写入Google Sheets
  // const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  // sheet.getRange(1, 1, speakerInfo.length, speakerInfo[0].length).setValues(speakerInfo);
}

function requestsmartsheet() {
  const sheetId = "[你的Sheet ID]";
  const token = "[你的API Token]";
  const url = `https://api.smartsheet.com/2.0/sheets/${sheetId}`;
  
  const options = {
    headers: {
      "Authorization": `Bearer ${token}`,
      "Content-Type": "application/json"
    },
    method: "GET"
  };

  const response = UrlFetchApp.fetch(url, options);
  const result = JSON.parse(response.getContentText());

  // 建立列名到columnId的映射
  const columnMap = {};
  result.columns.forEach(column => {
    columnMap[column.id] = column.title;
  });

  // 返回行数据和列映射
  return { rows: result.rows, columnMap };
}

关键修正说明

  1. 修正API响应解析:
    • 从result.rows获取行数据,而非不存在的records。
    • 新增columnMap,将列的id映射为列名,方便后续通过列名匹配对应单元格。
  2. 正确处理特殊属性名:
    • 对于带连字符的列名E-Number,使用rowFields['E-Number']语法访问。
  3. 正确解析单元格数据:
    • 遍历每行的cells数组,通过columnMap把columnId转为列名,构建行数据的字段映射后再提取所需值。

内容的提问来源于stack exchange,提问作者Allister Lobo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 23:15:41