应用程序脚本转储可变行数
App Script dumping variable number of rows
我正在使用 chrome 扩展程序通过 Apps 脚本更新工作表。
有 14 行要更新,我正在逐行发送数据。但问题是,如果我 运行 程序一次,它会更新,比方说,5 行。如果我再次 运行 程序,它将更新一些其他行数。另一个有趣的事情是,每次我 运行 程序,它都会发送不同的行。行永远不会相同。
Code.gs
function doGet(e){
var sheetID=e.parameter.sheetID;
var firstName = e.parameter.firstName;
var lastName = e.parameter.lastName;
var count = e.parameter.count
var ss = SpreadsheetApp.openById(spreadsheetId);
SpreadsheetApp.setActiveSpreadsheet(ss);
ss.appendRow([
firstName,
lastName,
count
]);
}
这里 count
是我发送的变量,用于检查哪些行被保存到工作表中。对于每次执行,此值都不同。有时它是 [0, 12, 1, 3, 5](当 14 行中只有 5 行被保存时)而其他时候它是 [1, 5, 14, 13](当 14 行中只有 4 行被保存时)
这当然是在不对代码做任何改动的情况下。
以下是从 backgroun.js
发送的 GET
请求
background.js
params = 'firstName=' + firstName + '&' + 'lastName=' + lastName + '&' + 'count=' + count
url = url + encodeURI(params)
console.log(url)
fetch(url, {
method: 'GET',
mode: 'no-cors',
})
.then((response) => response)
.then((data) => {
console.log(data);
})
.catch((error) => {
console.error('Error:', error);
});
我可能做错了什么?我错过了什么吗?
我最终不得不通过修改我的客户端代码来使用 getActiveSheet()
,它首先将数据一个一个地发送到应用程序脚本,再发送到数组对象 -
{ 1: [a,b,c],
2: [x,y,z],
3: [p,q,r],
...
}
我最终的 Apps 脚本代码如下:
应用脚本 (Code.gs)
function doPost(e){
try
{
var arr = [];
var data = JSON.parse(e.postData.contents);
for (var val in data){
arr.push(data[val])
}
var ss = SpreadsheetApp.openById(spreadsheetId);
SpreadsheetApp.setActiveSpreadsheet(ss);
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
SpreadsheetApp.getActiveSheet().getRange(lastRow + 1,1,arr.length, arr[0].length).setValues(arr);
}
catch (error)
{
return Logger.log(error.toString());
}
}
我正在使用 chrome 扩展程序通过 Apps 脚本更新工作表。
有 14 行要更新,我正在逐行发送数据。但问题是,如果我 运行 程序一次,它会更新,比方说,5 行。如果我再次 运行 程序,它将更新一些其他行数。另一个有趣的事情是,每次我 运行 程序,它都会发送不同的行。行永远不会相同。
Code.gs
function doGet(e){
var sheetID=e.parameter.sheetID;
var firstName = e.parameter.firstName;
var lastName = e.parameter.lastName;
var count = e.parameter.count
var ss = SpreadsheetApp.openById(spreadsheetId);
SpreadsheetApp.setActiveSpreadsheet(ss);
ss.appendRow([
firstName,
lastName,
count
]);
}
这里 count
是我发送的变量,用于检查哪些行被保存到工作表中。对于每次执行,此值都不同。有时它是 [0, 12, 1, 3, 5](当 14 行中只有 5 行被保存时)而其他时候它是 [1, 5, 14, 13](当 14 行中只有 4 行被保存时)
这当然是在不对代码做任何改动的情况下。
以下是从 backgroun.js
发送的GET
请求
background.js
params = 'firstName=' + firstName + '&' + 'lastName=' + lastName + '&' + 'count=' + count
url = url + encodeURI(params)
console.log(url)
fetch(url, {
method: 'GET',
mode: 'no-cors',
})
.then((response) => response)
.then((data) => {
console.log(data);
})
.catch((error) => {
console.error('Error:', error);
});
我可能做错了什么?我错过了什么吗?
我最终不得不通过修改我的客户端代码来使用 getActiveSheet()
,它首先将数据一个一个地发送到应用程序脚本,再发送到数组对象 -
{ 1: [a,b,c],
2: [x,y,z],
3: [p,q,r],
...
}
我最终的 Apps 脚本代码如下:
应用脚本 (Code.gs)
function doPost(e){
try
{
var arr = [];
var data = JSON.parse(e.postData.contents);
for (var val in data){
arr.push(data[val])
}
var ss = SpreadsheetApp.openById(spreadsheetId);
SpreadsheetApp.setActiveSpreadsheet(ss);
var lastRow = SpreadsheetApp.getActiveSheet().getLastRow();
SpreadsheetApp.getActiveSheet().getRange(lastRow + 1,1,arr.length, arr[0].length).setValues(arr);
}
catch (error)
{
return Logger.log(error.toString());
}
}