当前位置: 首页 > 知识库问答 >
问题:

如何使用batchUpdate在顶部插入新行,然后插入5个数据单元格?

金宣
2023-03-14

我正在使用Google Sheets客户端库将新行插入到电子表格中,然后在顶部行(但在标题行下方)中写入一些数据。

batchUpdate方法应该允许那些使用它的人以这样的方式组合操作:如果一个操作失败,其他操作也会失败。这在我的情况下是最好的,因为我不想在第2行插入数据,除非我已经成功地在第一行的顶部插入了新行。

然而,我不太明白如何正确使用应用编程接口。结果是在顶部插入了一个新行,但我的数据点中只有一个正在写入第一个单元格,但不是行中的所有5个单元格。这里是API调用:

const sheets = google.sheets({ version: 'v4', auth });
sheets.spreadsheets.batchUpdate({
    spreadsheetId: SHEET_ID,
    "resource": {
        "requests": [
            {
                "insertDimension": {
                    "range": {
                        "sheetId": 0,
                        "dimension": "ROWS",
                        "startIndex": 1,
                        "endIndex": 2
                    },
                    "inheritFromBefore": false
                }
            },
            {
                "updateCells": {

                    "rows": 
                        {
                            values: [{
                                "userEnteredValue": {
                                    stringValue: "Dec 14-Sep 20"
                                },
                                "userEnteredValue": {
                                    numberValue: 10
                                },
                                "userEnteredValue": {
                                    numberValue: 5
                                },
                                "userEnteredValue": {
                                    numberValue: 1
                                },
                                "userEnteredValue": {
                                    numberValue: 0.2
                                },
                            }]
                        }
                    ,
                    "fields": "*",
                    // "start": {
                    //     "sheetId": 0,
                    //     "rowIndex": 1,
                    //     "columnIndex": 4
                    // },
                    "range": {
                        "sheetId": 0,
                        "startRowIndex": 1,  // I want to write to second row only
                        "endRowIndex": 2,
                        "startColumnIndex": 0, // start at first column
                        "endColumnIndex": 5   // end at 5th column
                    }
                }
            }
        ]
    }
}, (err, res) => {
    if (err) return console.log('The API returned an error: ' + err);
    } else {
        console.log('No data found.');
    }
});

如您所见,我指定了一个范围,但是数据;具体来说,数据数组中的最后一个值0.2正在写入工作表中的第一列。我还尝试使用“开始”网格坐标而不是“范围”网格范围,但结果是一样的。

我需要修改什么才能将数据数组中的所有5个值写入工作表中,一次一行,一列?

共有1个答案

唐晗昱
2023-03-14

问题不在开始或范围属性中;相反,问题是传递到rows数组的对象的格式不正确。

现在,谷歌确实让使用batchUpdate修改单元格的API变得相当复杂。首先,在UpdateCellsRequest的文档中,我们看到rows[]数组接受一个RowData对象。RowData是一个具有键“values”的对象,其中包含CellData对象数组,但每个CellData对象都必须包装在一组{}中。

CellData对象由一个或多个属性组成,在本例中,我们选择“userEnteredValue”。它包含一个ExtendedValue对象,可以是number、string、bool、formula或error,它是这个复杂的嵌套对象系列中的最后一个。

上面代码的问题是,在文档中,row属性被标记为数组,但它实际上是一个包含数组的对象;因此,您错过了“row”后面的花括号。

以下是你应该拥有的:

           {
                "updateCells": {
                    "rows":
                    {
                        values: [
                            {
                                "userEnteredValue": {
                                    stringValue: "Dec 14-Sep 20"
                                }
                            },
                            {
                                "userEnteredValue": {
                                    numberValue: 10
                                }
                            },
                            {
                                "userEnteredValue": {
                                    numberValue: 5
                                }
                            },
                            {
                                "userEnteredValue": {
                                    numberValue: 1
                                }
                            },
                            {
                                "userEnteredValue": {
                                    numberValue: 0.2
                                }
                            }
                        ]
                    }
                    ,
                    "fields": "*",
                    "range": {
                        "sheetId": 0,
                        "startRowIndex": 1,
                        "endRowIndex": 2,
                        "startColumnIndex": 0,
                        "endColumnIndex": 5
                    }
                }
            }
 类似资料:
  • 我有一个谷歌表单的问题。我最近创建了一个Google表单,允许人们留下反馈。但是,当人们填写表单时,我不希望Google表单上的新行插入下方,我希望该行插入顶部。 我已经尝试使用下面的代码,但是它不起作用。 新行仍然插入底部

  • 问题内容: 我创建了一个数据库名称movielibrarysystem,其中有3个表。 分别是类型,发布者和电影..​​.现在1个发布者可以有很多电影,而1个电影则有很多类型..在movie表中,发布者ID和typeid都充当外键。 我的问题是,如何在电影表中插入数据…我已经将数据插入到发行商和类型表中,但是我无法插入电影表中。 问题答案: 这就是你要做的。首先,发行人与电影之间的关系是一对多的-

  • 问题内容: 我正在一个有两个秒和两个秒的项目上,当用户按下按钮时,第一个中的数据应该进入,第二个中的数据进入第二个。我的问题是,我不知道每次用户按下按钮时都如何放置数据,我知道如何插入数据,但是据我所知,这种方法只能工作一次。那么,每当用户按下按钮时,我可以使用哪种方法来更新? 问题答案: 单击按钮时,使用和插入新单元格。 首先将数据追加到tableview数组中 然后更新表格并插入新行 这将插入

  • 我使用laravel firstOrNew方法插入数据。当数据不在表中时,它将插入数据。插入数据后,我无法获取上次插入的id。 前任:

  • 我有这部分代码: 现在想返回插入或更新的数据作为响应,但是在谷歌上看到很多帖子后,所有尝试都失败了,我怎么能这样做?没有上次插入的id 但返回布尔值: 如何在雄辩的ORM laravel最后插入id 大多数主题想要返回,但我想要所有数据。

  • 问题内容: 是否可以使用一个insert语句在一个表中插入多行?我知道如果发生以下情况,将会发生这种情况: 但是,如果我想插入: 只需一个插入命令? 问题答案: 两种解决方案(来源:http : //appsfr.free.fr/spip.php?article21): 或者