异常:数据中的列数与范围内的列数不匹配 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
中所有列的长度变得相同。
参考:
我有以下脚本,它使用 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
中所有列的长度变得相同。