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



我有以下脚本,它使用importjson从API url调用数据,然后将它们存储到一个表中。

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时,就会出现此错误。例如,上面代码中的第一个URL返回24列,而第二个URL返回3列,这会导致错误。

我想要达到的目标:我希望该脚本与这两个url工作,无论列的数量。

从您的显示脚本和您的错误消息,我担心在您的脚本中,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中所有列的长度相同。
  • 参考:

  • map ()

最新更新