如何在 Google 表格中接受可变数量的参数
How to accept variable amount of parameters in Google Sheets
我正在构建一个解决方案,其中添加到 HTTP get 请求的参数数量是可变的。这意味着 url 可以携带 1 到 n 个参数。 URL 中的参数用标准名称和附加索引标识。这是一个示例 URL:
如何解释 .gs 中的 doGet() 函数中可变数量的参数?
编辑:
我想用这个请求创建一个新的 google sheet 的 header。参数的可变数量应该是 header 列。例如。如果请求包含 5 个参数,我想在 google sheet 的第一行添加到第 1 至 5 列参数的相应值。
我尝试了以下代码,但它不起作用:
function doGet(request) {
var FileNameString = request.parameter.fileName; //name of the new .gs file
var FridgeItems = request.parameter.fridgeItems; //amount of parameters/column headers passed to .gs
var sheet = SpreadsheetApp.create(FileNameString);
for(var i=0; i<FridgeItems ; i++){
sheet.getRange(1,i+2)
.setValues(
sheet.appendRow([request.parameter.fridgeItem&i]);
);
}
}
}
目标:
当发出 GET
请求时,您想要创建一个新的点差sheet,其名称将是请求参数键 fileName
的值,以及所有其他值来自所有其他请求的参数将被附加到创建的传播sheet.
中唯一的sheet
问题:
- 您不知道如何遍历不同的请求参数。
- 您正在提供 Sheet (that's what's returned by the method appendRow(rowContents)) as an argument of setValues(values)。这不是一个有效的论点;您应该提供一个二维数组。
解决方案:
- 从
fileName
中检索值并使用 delete operator. 从 object request.parameter
中删除此 属性
- 由于您需要其余参数的值,您可以使用 Object.values() 检索包含这些值的数组。
- 使用
Spreadsheet.appendRow()
将这些值附加到创建的价差sheet。
代码片段:
function doGet(request) {
const parameters = request.parameter;
const fileName = parameters.fileName;
delete parameters.fileName;
const headers = Object.values(parameters);
const spreadsheet = SpreadsheetApp.create(fileName);
spreadsheet.appendRow(headers);
return ContentService.createTextOutput("Headers appended!");
}
编辑:
如果要确保 headers 的设置顺序与查询中的顺序相同,可以改用 request.queryString
,其中 returns 的查询字符串部分URL,所以在这种情况下会像:
fileName=2020-12-15&fridgeItems=2&fridgeItem0=ValueOfFridgeItem0&fridgeItem1=ValueOfFridgeItem1
然后您可以使用 map and filter 的组合来检索值(不包括对应于 fileName
的值):
function doGet(request) {
const headers = request.queryString.split("&")
.map(param => param.split("="))
.filter(param => param[0] !== "fileName")
.map(param => param[1]);
const fileName = request.parameter.fileName;
const sheet = SpreadsheetApp.create(fileName)
sheet.appendRow(headers);
return ContentService.createTextOutput("Headers appended!");
}
我正在构建一个解决方案,其中添加到 HTTP get 请求的参数数量是可变的。这意味着 url 可以携带 1 到 n 个参数。 URL 中的参数用标准名称和附加索引标识。这是一个示例 URL:
如何解释 .gs 中的 doGet() 函数中可变数量的参数?
编辑: 我想用这个请求创建一个新的 google sheet 的 header。参数的可变数量应该是 header 列。例如。如果请求包含 5 个参数,我想在 google sheet 的第一行添加到第 1 至 5 列参数的相应值。
我尝试了以下代码,但它不起作用:
function doGet(request) {
var FileNameString = request.parameter.fileName; //name of the new .gs file
var FridgeItems = request.parameter.fridgeItems; //amount of parameters/column headers passed to .gs
var sheet = SpreadsheetApp.create(FileNameString);
for(var i=0; i<FridgeItems ; i++){
sheet.getRange(1,i+2)
.setValues(
sheet.appendRow([request.parameter.fridgeItem&i]);
);
}
}
}
目标:
当发出 GET
请求时,您想要创建一个新的点差sheet,其名称将是请求参数键 fileName
的值,以及所有其他值来自所有其他请求的参数将被附加到创建的传播sheet.
问题:
- 您不知道如何遍历不同的请求参数。
- 您正在提供 Sheet (that's what's returned by the method appendRow(rowContents)) as an argument of setValues(values)。这不是一个有效的论点;您应该提供一个二维数组。
解决方案:
- 从
fileName
中检索值并使用 delete operator. 从 object - 由于您需要其余参数的值,您可以使用 Object.values() 检索包含这些值的数组。
- 使用
Spreadsheet.appendRow()
将这些值附加到创建的价差sheet。
request.parameter
中删除此 属性
代码片段:
function doGet(request) {
const parameters = request.parameter;
const fileName = parameters.fileName;
delete parameters.fileName;
const headers = Object.values(parameters);
const spreadsheet = SpreadsheetApp.create(fileName);
spreadsheet.appendRow(headers);
return ContentService.createTextOutput("Headers appended!");
}
编辑:
如果要确保 headers 的设置顺序与查询中的顺序相同,可以改用 request.queryString
,其中 returns 的查询字符串部分URL,所以在这种情况下会像:
fileName=2020-12-15&fridgeItems=2&fridgeItem0=ValueOfFridgeItem0&fridgeItem1=ValueOfFridgeItem1
然后您可以使用 map and filter 的组合来检索值(不包括对应于 fileName
的值):
function doGet(request) {
const headers = request.queryString.split("&")
.map(param => param.split("="))
.filter(param => param[0] !== "fileName")
.map(param => param[1]);
const fileName = request.parameter.fileName;
const sheet = SpreadsheetApp.create(fileName)
sheet.appendRow(headers);
return ContentService.createTextOutput("Headers appended!");
}