如何在 google sheets API 中写入 sheet 的特定范围
How to write to a specific range of a sheet in google sheets API
这是我第一次使用 google sheets API,我正在尝试编写一个脚本来接收一些数据并对其进行处理,这很有效,然后我想将处理后的数据写入已存在的 sheet 中的列,这是我需要帮助的。
是否有更好的方法将数组放在特定范围内?
错误消息说无法获取 null 的范围,这是我目前的代码,不属于块的行是问题所在:
function getList() {
var spreadsheetId = '1BjnZ-SPBVcCdITxcvEX1nCPecvGdYSKQ0m_GiaKduZQ';
var rangeName = 'Paste Here!I1:GZ6';
var pasteRange = 'The Goods!B3:B1000';
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
var width = values[0].length;
var teamNumbers = [];
if (!values) {
Logger.log('No data found.');
} else {
for(var col = 1; col < width; col+=2) {
for(var row = 0; row < values.length; row++) {
teamNumbers += values[row][col].toString();
teamNumbers += '\n'
}
}
SpreadsheetApp.getActiveSpreadsheet().getRange(pasteRange).setValues(teamNumbers);
}
}
此外,第二个问题,如何使某个变量的范围成为变量,以便从参数中获取 I1:GZ6?
非常感谢任何帮助,提前致谢!
第一个问题
这个修改怎么样?
修改点:
teamNumbers
声明为数组。但它被用作字符串。
- 为了使用表格 API 将值导入电子表格,必须使用
teamNumbers
作为二维数组。
- 如果要在一个单元格中导入字符串值,
- 如果使用表格API,请使用
teamNumbers = [[value]]
。
- 在使用
SpreadsheetApp
的setValue(teamNumbers)
的情况下,请使用teamNumbers = value
。
- 如果要使用
SpreadsheetApp.getActiveSpreadsheet().getRange(pasteRange).setValues(teamNumbers)
,pasteRange
需要匹配teamNumbers
的行数和列数。
- 如果要使用
var rangeName = 'Paste Here!I1:GZ6'
,可以使用 Sheets.Spreadsheets.Values.update()
的工作表 API。
- 在本次修改中,使用了这个。
修改后的脚本:
function getList() {
var spreadsheetId = '1BjnZ-SPBVcCdITxcvEX1nCPecvGdYSKQ0m_GiaKduZQ';
var rangeName = 'Paste Here!I1:GZ6';
var pasteRange = 'The Goods!B3:B1000';
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
var width = values[0].length;
var teamNumbers = [];
if (!values) {
Logger.log('No data found.');
} else {
for(var col = 1; col < width; col+=2) {
for(var row = 0; row < values.length; row++) {
teamNumbers.push([values[row][col].toString()]); // Modified
}
}
var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId(); // Modified
Sheets.Spreadsheets.Values.update({values: teamNumbers}, spreadsheetId, pasteRange, {valueInputOption: "RAW"}); // Modified
}
}
注:
- 如果出现与API相关的错误,请再次确认是否在高级Google服务和API控制台中启用了表格API。
参考:
关于你的第二个问题
如果要将网格范围转换为 a1notation,可以在 the document and this gist 查看示例。
如果我误解了你的问题,我很抱歉。
出现错误的唯一原因
Cannot call method getRange
of null
来自行 SpreadsheetApp.getActiveSpreadsheet()
的是如果您使用的是独立脚本而不是绑定脚本。独立脚本必须使用 SpreadsheetApp.openById("some id")
才能访问电子表格。
有关差异的详细信息,请参阅 Apps 脚本文档
这是我第一次使用 google sheets API,我正在尝试编写一个脚本来接收一些数据并对其进行处理,这很有效,然后我想将处理后的数据写入已存在的 sheet 中的列,这是我需要帮助的。
是否有更好的方法将数组放在特定范围内?
错误消息说无法获取 null 的范围,这是我目前的代码,不属于块的行是问题所在:
function getList() {
var spreadsheetId = '1BjnZ-SPBVcCdITxcvEX1nCPecvGdYSKQ0m_GiaKduZQ';
var rangeName = 'Paste Here!I1:GZ6';
var pasteRange = 'The Goods!B3:B1000';
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
var width = values[0].length;
var teamNumbers = [];
if (!values) {
Logger.log('No data found.');
} else {
for(var col = 1; col < width; col+=2) {
for(var row = 0; row < values.length; row++) {
teamNumbers += values[row][col].toString();
teamNumbers += '\n'
}
}
SpreadsheetApp.getActiveSpreadsheet().getRange(pasteRange).setValues(teamNumbers);
}
}
此外,第二个问题,如何使某个变量的范围成为变量,以便从参数中获取 I1:GZ6?
非常感谢任何帮助,提前致谢!
第一个问题
这个修改怎么样?
修改点:
teamNumbers
声明为数组。但它被用作字符串。- 为了使用表格 API 将值导入电子表格,必须使用
teamNumbers
作为二维数组。 - 如果要在一个单元格中导入字符串值,
- 如果使用表格API,请使用
teamNumbers = [[value]]
。 - 在使用
SpreadsheetApp
的setValue(teamNumbers)
的情况下,请使用teamNumbers = value
。
- 如果使用表格API,请使用
- 为了使用表格 API 将值导入电子表格,必须使用
- 如果要使用
SpreadsheetApp.getActiveSpreadsheet().getRange(pasteRange).setValues(teamNumbers)
,pasteRange
需要匹配teamNumbers
的行数和列数。 - 如果要使用
var rangeName = 'Paste Here!I1:GZ6'
,可以使用Sheets.Spreadsheets.Values.update()
的工作表 API。- 在本次修改中,使用了这个。
修改后的脚本:
function getList() {
var spreadsheetId = '1BjnZ-SPBVcCdITxcvEX1nCPecvGdYSKQ0m_GiaKduZQ';
var rangeName = 'Paste Here!I1:GZ6';
var pasteRange = 'The Goods!B3:B1000';
var values = Sheets.Spreadsheets.Values.get(spreadsheetId, rangeName).values;
var width = values[0].length;
var teamNumbers = [];
if (!values) {
Logger.log('No data found.');
} else {
for(var col = 1; col < width; col+=2) {
for(var row = 0; row < values.length; row++) {
teamNumbers.push([values[row][col].toString()]); // Modified
}
}
var spreadsheetId = SpreadsheetApp.getActiveSpreadsheet().getId(); // Modified
Sheets.Spreadsheets.Values.update({values: teamNumbers}, spreadsheetId, pasteRange, {valueInputOption: "RAW"}); // Modified
}
}
注:
- 如果出现与API相关的错误,请再次确认是否在高级Google服务和API控制台中启用了表格API。
参考:
关于你的第二个问题
如果要将网格范围转换为 a1notation,可以在 the document and this gist 查看示例。
如果我误解了你的问题,我很抱歉。
出现错误的唯一原因
Cannot call method
getRange
ofnull
来自行 SpreadsheetApp.getActiveSpreadsheet()
的是如果您使用的是独立脚本而不是绑定脚本。独立脚本必须使用 SpreadsheetApp.openById("some id")
才能访问电子表格。
有关差异的详细信息,请参阅 Apps 脚本文档