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

使用AppendCellsRequestspreadsheets.batch更新忽略列样式

端木承业
2023-03-14

作为开发人员,我使用以下endpoint:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate

并要求:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/request#AppendCellsRequest插入具有值的新行。

我有一些列格式样式的电子表格:背景色/字体重量/文本换行/数据验证。

问题是,当我使用这样的请求时:

curl --request POST \
 'https://sheets.googleapis.com/v4/spreadsheets/1SoDx8YRyiKF9vKfa_2w0xc7DTNIlQoLC6hBq1SCJEJY:batchUpdate?key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"requests":[{"appendCells":{"sheetId":0,"fields":"*","rows":[{"values":[{"userEnteredValue":{"stringValue":"TEST STRING VALUE long"}},{"userEnteredValue":{"stringValue":"TEST TEXT LONG"}}]}]}}]}' \
  --compressed

我看到文本换行和数据验证样式被忽略:

这里的关键点我只使用:'userEnteredValue'字段来提供值。

根据该文件:https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/cells#CellData我可以使用“userEnteredFormat”/“dataValidation”,但“在编写时,新格式将与现有格式合并。”我发现再次获取和发布这些样式格式相当复杂。

我的问题-有没有办法使用AppendCellsRequest尽可能简单地发布CellData并保留现有的列样式?

共有2个答案

涂玉韵
2023-03-14

塔奈克的回答是正确的,但我发现以下奇怪之处。

我的CellData看起来像(Kotlin):

        fun cellDataDouble(value: Double, doublePattern: String = "#.#"): CellData {
            return CellData().also { cd ->
                cd.userEnteredFormat = CellFormat().setNumberFormat(NumberFormat().also { nf ->
                    nf.type = "Number"
                    nf.pattern = doublePattern
                })
                cd.userEnteredValue = ExtendedValue().setNumberValue(value)
            }
        }

第20行附加了指定的两个字段,第21行只附加了userEnteredValue,这表明未应用userEnteredFormat。文档建议应该合并格式,但是很明显,只需指定数字格式,字体和粗体格式就会被删除。

伯晨
2023-03-14
  • 您希望在Sheets API中使用AppendCellsRequest of batchUpdate方法放置这些值

在本例中,您使用“字段”:“*”,而只设置用户输入值的属性。在这种情况下,也会设置除userEnteredValue之外的属性。我想这就是你的问题所在。

为了避免此问题,请使用userEnteredValue字段

当您的请求主体被修改时,它变成如下所示。

--data '{"requests":[{"appendCells":{"sheetId":0,"fields":"*","rows":[{"values":[{"userEnteredValue":{"stringValue":"TEST STRING VALUE long"}},{"userEnteredValue":{"stringValue":"TEST TEXT LONG"}}]}]}}]}'
--data '{"requests":[{"appendCells":{"sheetId":0,"fields":"userEnteredValue","rows":[{"values":[{"userEnteredValue":{"stringValue":"TEST STRING VALUE long"}},{"userEnteredValue":{"stringValue":"TEST TEXT LONG"}}]}]}}]}'
  • “字段”:“*”已修改为“字段”:“userEnteredValue”
  • 方法:spreadsheets.batch更新
  • AppendCellsRequest

 类似资料:
  • 我希望用同一行中其他列的相关值更新列。我正在更新的列是唯一的,如果执行此操作,我有时会出现重复的键错误。我希望忽略这些错误,只更新其中一条记录,忽略其他记录。 我的查询如下所示: 现在,在Fname和Lname两行匹配的情况下,我只希望更新第一个记录Coolname。 谢谢(MS SQL Server)

  • 我的例子如下: Person是一个简单的实体,有3个字段“Long id、String name、intger age”,并且映射到相应的Person表,上面有3列) 有没有办法通过使用@Query 重要的 请帮帮忙。

  • 忽略列表显示不需要处理的资源或一类规则建议。 忽略列表显示不需要处理的资源或一类规则建议。当某资源或某类型的建议不需要用户处理时,可以通过忽略或忽略该类建议功能将其显示在忽略列表。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “优化建议/安全检查/忽略列表” 菜单项,进入忽略列表页面。 恢复 当忽略列表中某资源或某规则建议需要用户关注处理时,可以使用恢复功能将其显示在建议列表。

  • 忽略列表显示不需要处理的资源或一类规则建议。 忽略列表显示不需要处理的资源或一类规则建议。当某资源或某类型的建议不需要用户处理时,可以通过忽略或忽略该类建议功能将其显示在忽略列表。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “优化建议/成本优化/忽略列表” 菜单项,进入忽略列表页面。 恢复 当忽略列表中某资源或某规则建议需要用户关注处理时,可以使用恢复功能将其显示在建议列表。

  • 我使用的是Spring r2dbc和ReactiveCrudRepository,我有一个在生成更新查询时需要忽略的字段 如何在更新查询中忽略companyName。我可以在使用@列的插入查询中忽略它,但它不适用于更新