如何使用 google 应用程序脚本更新 Google 工作表(基于 JSON 数据)中特定行的单元格?
How to update cells of a particular row in Google Sheets (based on JSON data) using google apps script?
我正在脚本中获取 JSON 格式的数据(通过 url 参数),看起来像这样 - 例如{"row":3,"data":{"2":"apple","3":"strawberry","5":"pineapple"}}
。
(格式化json)-
{
"row": 3,
"data": {
"2": "nyc",
"3": "strawberry",
"5": "18"
...
}
}
现在,要更新单元格,我们需要它的行号和列号 - json 中的 row
是行号,2 3 5
是单元格的列号应该用给定的值更新。
如果我想用它们各自的值更新给定的单元格,我的代码应该是什么样子?这是我想要做的事情的表示 -
(如您所见,对于行号 3
,列 2
、3
和 5
的单元格值已更新)
我无法弄清楚如何解析此 JSON 并获取目标列及其值的列表,以及如何使用应用程序脚本更新单元格...感谢您的帮助 :) 谢谢!
您可以使用方法 Object.entries()
遍历嵌套对象的键和值
- 然后使用 Apps 脚本方法
getRange(row, col)
和 setValue()
将值设置到 sheet
样本:
function myFunction() {
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var json = {
"row": 3,
"data": {
"2": "nyc",
"3": "strawberry",
"5": "18"
}
}
var row = json.row;
var data = json.data;
for (const [col, value] of Object.entries(data)) {
sheet.getRange(row, col).setValue(value);
}
}
- 请记住,如果您的 JSON 很大并且您设置了很多值,方法
setValue()
将会很慢。在这种情况下,最好先将值存储在数组中,然后通过一次 setValues()
调用将它们设置到 sheet 中。不过这需要相邻的值范围。
参考文献:
启用 google 张 API 服务并尝试使用 batchupdate
const json = { "row": 3, "data": { "2": "apple", "3": "strawberry", "5": "pineapple" } }
function myFunction() {
var ss = SpreadsheetApp.getActive()
var sheet = ss.getActiveSheet();
var row = json.row;
var data = [];
for (const [col, value] of Object.entries(json.data)) {
data.push({
range: `${sheet.getName()}!${columnToLetter(+col) + (+row)}`,
values: [[`${value}`]],
})
}
var resource = {
valueInputOption: 'USER_ENTERED',
data: data,
};
try { Sheets.Spreadsheets.Values.batchUpdate(resource, ss.getId()); } catch (e) { console.log(JSON.stringify(e)) }
}
function columnToLetter(column) {
var temp, letter = '';
while (column > 0) {
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
使用Object.entries检索列和值
使用 ${sheet.getName()}!${columnToLetter(+col) + (+row)}
重建工作表和范围以获得地址 sheet1!A1
例如
使用 columnToLetter 函数将数字中的列转换为字母
使用batchUpdate更新
我正在脚本中获取 JSON 格式的数据(通过 url 参数),看起来像这样 - 例如{"row":3,"data":{"2":"apple","3":"strawberry","5":"pineapple"}}
。
(格式化json)-
{
"row": 3,
"data": {
"2": "nyc",
"3": "strawberry",
"5": "18"
...
}
}
现在,要更新单元格,我们需要它的行号和列号 - json 中的 row
是行号,2 3 5
是单元格的列号应该用给定的值更新。
如果我想用它们各自的值更新给定的单元格,我的代码应该是什么样子?这是我想要做的事情的表示 -
(如您所见,对于行号 3
,列 2
、3
和 5
的单元格值已更新)
我无法弄清楚如何解析此 JSON 并获取目标列及其值的列表,以及如何使用应用程序脚本更新单元格...感谢您的帮助 :) 谢谢!
您可以使用方法 Object.entries()
遍历嵌套对象的键和值
- 然后使用 Apps 脚本方法
getRange(row, col)
和setValue()
将值设置到 sheet
样本:
function myFunction() {
var sheet = SpreadsheetApp.getActive().getActiveSheet();
var json = {
"row": 3,
"data": {
"2": "nyc",
"3": "strawberry",
"5": "18"
}
}
var row = json.row;
var data = json.data;
for (const [col, value] of Object.entries(data)) {
sheet.getRange(row, col).setValue(value);
}
}
- 请记住,如果您的 JSON 很大并且您设置了很多值,方法
setValue()
将会很慢。在这种情况下,最好先将值存储在数组中,然后通过一次setValues()
调用将它们设置到 sheet 中。不过这需要相邻的值范围。
参考文献:
启用 google 张 API 服务并尝试使用 batchupdate
const json = { "row": 3, "data": { "2": "apple", "3": "strawberry", "5": "pineapple" } }
function myFunction() {
var ss = SpreadsheetApp.getActive()
var sheet = ss.getActiveSheet();
var row = json.row;
var data = [];
for (const [col, value] of Object.entries(json.data)) {
data.push({
range: `${sheet.getName()}!${columnToLetter(+col) + (+row)}`,
values: [[`${value}`]],
})
}
var resource = {
valueInputOption: 'USER_ENTERED',
data: data,
};
try { Sheets.Spreadsheets.Values.batchUpdate(resource, ss.getId()); } catch (e) { console.log(JSON.stringify(e)) }
}
function columnToLetter(column) {
var temp, letter = '';
while (column > 0) {
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
使用Object.entries检索列和值
使用
${sheet.getName()}!${columnToLetter(+col) + (+row)}
重建工作表和范围以获得地址sheet1!A1
例如使用 columnToLetter 函数将数字中的列转换为字母
使用batchUpdate更新