我有以下脚本,它使用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 ()