我需要模拟从 html 表单到页面的 post 请求。我需要知道如何在有效负载中正确发送数组。提前致谢..
我有简单的 html 代码,目标页面将以这种方式收到提交:
{
"args": {},
"data": "",
"files": {},
"form": {
"Link[]": [
"picturelink1.png",
"picturelink2.png",
"picturelink3.png"
],
"animationtype": "link",
"size": "400",
"speed": "0.4",
"usersize": "",
"userspeed": "0.1"
}
}
Run Code Online (Sandbox Code Playgroud)
我在 GAS 中编写了代码,它应该模拟相同的请求:
var payload =
{
"Link[]":["jovianarchive_com/Content/Charts/621903744000000000_png","jovianarchive_com/Content/Charts/621903708000000000_png","jovianarchive_com/Content/Charts/621903816000000000_png"],
"animationtype":"link","size":"300","speed":"1","usersize":"","userspeed":""
}
var options =
{
"method" : "post",
"payload" : payload
};
var result = (UrlFetchApp.fetch("http://httpbin.org/post", options).getContentText());
Run Code Online (Sandbox Code Playgroud)
这将返回此请求:
{
"args": {},
"data": "",
"files": {},
"form": { "Link[]": "[Ljava.lang.Object;@536733f2",
"animationtype": "link",
"size": "300",
"speed": "1",
"usersize": …Run Code Online (Sandbox Code Playgroud) 考虑这种情况。
var sheet = SpreadsheetApp.getActiveSheet();
var range = sheet.getRange("2:2");
var values = range.getValues();
values[0][0] = "updated value"; //updating retrieved data
sheet.insertRowAfter(1); //here the problem appears
range.setValues(values); //trying to save updated row data - FAIL!
Run Code Online (Sandbox Code Playgroud)
更新后的行值将被写入第2行(根据范围选择器“ 2:2”),而不是在新位置“ 3:3”。结果:它将覆盖第二行的数据,而不是更新先前选择/加载的行,该行现在位于位置“ 3:3”,而不再位于“ 2:2”。
我正在寻找一种方法,即使由于在工作表中其他位置添加/删除的行/单元格而移动了范围时,也该如何保持范围的“地址”。
在此虚拟示例中,我可以跟踪范围变化。但是在并行处理/更新工作表中,我不能简单地跟踪来自许多不同地方的所有更改。
到目前为止,我想出了一个解决方案,仅在SS的末尾添加新行(这不会更改上面任何行的范围,但是我希望能够在表格顶部添加新行而不影响已经选择的范围。行也是危险的情况-它也会改变范围的位置。
LockService不能真正解决这种情况,因为我在同一张工作表上有很多脚本(由于插件的速度性能,不使用集中式库)。
单元格或行的元数据似乎太复杂了,无法完成如此简单的任务。
从我的角度来看,即使对象范围移动/移动到其他位置,它也应保持其位置。否则,我看不到将Range作为对象的原因-如果它仅保留有关从何处拾取的固定信息。欢迎任何建议。先感谢您..
编辑:
仅添加上下文。我使用Google表格作为订单的数据库(到目前为止有1万个)-每行表示一个订单(客户),而并非所有订单都在一张表格中-不同的产品具有不同的表格(+-10个产品/表格)
有一个建议使用命名范围来解决此问题-那么,如果电子表格将具有成千上万个命名范围,会发生什么情况-在没有严重的性能问题的情况下可以正常工作吗?我正在考虑为每个订单行创建命名范围,因此我可以轻松地按orderId选择正确的行,而不必担心在处理另一个订单时新订单到达时移动一行