javascript - 在 Node.JS 中,我将如何使用 Google Sheets API 向上“移动”整个值范围?
问题描述
我有一个由 Node.JS 应用程序读取和写入的 Google 电子表格。
在一种情况下,我需要将整个范围向上移动(向上移动A3:D
一个),但由于我对 Google Sheets API 非常陌生,所以我没有这样做。我考虑过使用这些方法:
a)复制范围内的所有值并将其粘贴一个
使用sheets.spreadsheet.values.get
,我将获取所有值,A3:D
然后使用 将其保存为数组toLocaleString()
。然后,我会清除该范围内的所有值。最后,我将把这些数据放在一个范围内A2:D
。
问题:设置数据时,我会使用数组还是简单地使用response.value.data
甚至简单地使用response.value
?我如何将我的数组sheets.spreadsheet.values.set
作为参数传递?
b) 在所有值下方插入一行
我会使用这篇文章中找到的方法:Shift Cell Range in Google Sheets
问题:这似乎是一个好方法,但我感觉它会导致奇怪的行为。我的电子表格中有一个“标题”行(没有实际数据),我担心这样做会覆盖它。此外,获取实际插入新行的行号的最佳方法是什么?
我将不胜感激有关如何解决此问题的一些指导。谢谢!
编辑 1
我设法拼凑了这段代码。我正在尝试制作CutPasteRequst,但我无法弄清楚语法以及如何使其工作。
var spreadsheetId = 'My sheet ID';
sheets.spreadsheets.values.batchUpdate({
auth: client, // 'client' is already authorised
spreadsheetId: spreadsheetId,
requestBody: {
source: 'Words to display!A3:D',
destination: 'Words to display!A2',
pasteType: 'pasteValues.PASTE_VALUES'
}
},
function(err, response) {
if (err) {
console.log('API error: ' + err);
}
});
API 错误:
2019-09-18T05:33:03.209240+00:00 app[web.1]:API 返回错误:错误:
Invalid JSON payload received. Unknown name "source": Cannot find field.
Invalid JSON payload received. Unknown name "destination": Cannot find field.
Invalid JSON payload received. Unknown name "paste_type": Cannot find field.
解决方案
您想使用带有 Node.js 的 googleapis 来实现以下情况。
从
1 Alpha Beta Gamma Delta 2 a1 b1 c1 d1 3 a2 b2 c2 d2 4 a3 b3 c3 d3 5 a4 b4 c4 d4 6 a5 b5 c5 d5
从
1 Alpha Beta Gamma Delta 2 a2 b2 c2 d2 3 a3 b3 c3 d3 4 a4 b4 c4 d4 5 a5 b5 c5 d5
您已经能够使用 Sheets API 为电子表格放置和获取值。
如果我的理解是正确的,那么这个示例脚本怎么样。
模式1:
在此模式中,使用了带有电子表格.batchUpdate 方法的 cutPaste 请求。“A3:D”的值被复制到“A2:D”。
示例脚本:
const spreadsheetId = "###"; // Please set Spreadsheet ID.
const sheetId = ###; // Please set sheet ID.
sheets.spreadsheets.batchUpdate(
{
auth: client,
spreadsheetId: spreadsheetId,
requestBody: {
requests: [
{
cutPaste: {
source: {
sheetId: sheetId,
startRowIndex: 2,
startColumnIndex: 0,
endColumnIndex: 4
},
destination: { sheetId: sheetId, rowIndex: 1 },
pasteType: "PASTE_NORMAL"
}
}
]
}
},
function(err, response) {
if (err) {
console.log('API error: ' + err);
}
});
模式 2:
在此模式中,使用了带有电子表格.batchUpdate 方法的 deleteDimension 请求。第 2 行被删除。
示例脚本:
const spreadsheetId = "###"; // Please set Spreadsheet ID.
const sheetId = ###; // Please set sheet ID.
sheets.spreadsheets.batchUpdate(
{
auth: client,
spreadsheetId: spreadsheetId,
requestBody: {
requests: [
{
deleteDimension: {
range: {
sheetId: sheetId,
startIndex: 1,
endIndex: 2,
dimension: "ROWS"
}
}
},
{
appendDimension: {
sheetId: sheetId,
dimension: "ROWS",
length: 1
}
}
]
}
},
function(err, response) {
if (err) {
console.log('API error: ' + err);
}
});
- 在此示例脚本中,删除一行后,使用 appendDimension 请求添加新行。
笔记:
- 在电子表格.batchUpdate的方法中,请使用不是a1Notation 的GridRange。
- 使用此脚本时,如果出现错误,请使用最新版本的googleapis。现在最新版本是 43.0.0。
参考:
推荐阅读
- java - 如何在 ConstraintValidator 中使用 @Autowired?
- plsql - 在 PostgreSQL 中编写一个从表 A 读取并写入表 B 的存储过程
- azure-cosmosdb - Cosmos db - FeedResponse 属性值缺失
- c# - 获取 Dev express XPO 的 SQL 语句
- excel - 如何转换要在 VBA 中使用的基本 excel 函数?
- java - 睡眠时的 CPU 消耗
- java - 无法在 Android 10 中创建目录
- sql-server - 更改 SQL Server 默认系统日志的日志目录
- python - 重命名列后 Head() 不起作用
- android - 找不到参数的方法 implementation() [androidx.appcompat:appcompat:1.1.0-rc01]