异常:数据中的列数与范围内的列数不匹配 ImportJson API 调用问题

Exception: The number of columns in the data does not match the number of columns in the range ImportJson API call issue

我有以下脚本,它使用 importjson 从 API url 调用数据,然后将它们存储到 sheet.

function test() {
  let startcell = "Test!A1"
  const parameters = [
    {
      url: 'https://api.x.immutable.com/v1/orders?buy_token_address=0xccc8cb5229b0ac8069c51fd58367fd1e622afd97&direction=asc&order_by=buy_quantity&page_size=9&sell_metadata=%7B%22proto%22%3A%5B%221%22%5D%2C%22quality%22%3A%5B%22Meteorite%22%5D%7D&sell_token_address=0xacb3c6a43d15b907e8433077b6d38ae40936fe2c&status=active',
    },
    { 
      url: 'https://api.x.immutable.com/v1/orders?buy_token_address=0xccc8cb5229b0ac8069c51fd58367fd1e622afd97&direction=asc&order_by=buy_quantity&page_size=9&sell_metadata=%7B%22proto%22%3A%5B%2222%22%5D%2C%22quality%22%3A%5B%22Meteorite%22%5D%7D&sell_token_address=0xacb3c6a43d15b907e8433077b6d38ae40936fe2c&status=active',
    },
];
  const ss = SpreadsheetApp.getActive();
  let data = []
  parameters.forEach(spec => {  
    data.push(ImportJSON(spec.url));
  });

  data = data.flat()
  ss.getRange(startcell)
      .offset(0, 0, data.length, data[0].length)
      .setValues(data);
}

错误: 异常:数据中的列数与范围中的列数不匹配。数据有 3 但范围有 24.

解释: 当一个 url 的数据列多于或少于其他列时,会出现此错误。比如上面代码中第一个URL returns 24列,而第二个URL returns 3列,这样就报错了

我想要实现的目标:我希望脚本与 urls 一起工作,无论列数如何。

根据您的显示脚本和错误消息,我担心在您的脚本中,data 中所有列的长度可能不相同。如果我的理解是正确的,下面的修改怎么样?

发件人:

data = data.flat()
ss.getRange(startcell)
    .offset(0, 0, data.length, data[0].length)
    .setValues(data);

收件人:

data = data.flat()

// --- I added below script.
const max = Math.max(...data.map(r => r.length));
data = data.map(r => r.length < max ? [...r, ...Array(max - r.length)] : r);
// ---

ss.getRange(startcell)
    .offset(0, 0, data.length, data[0].length)
    .setValues(data);
  • 通过这次修改,data中所有列的长度变得相同。

参考: