格式化来自 API V4 的 google 工作表中的单元格
Format cells in google sheets from API V4
我在查看文档后开始使用 Google Sheets api 进行开发,有几件事我不明白或找不到。
这是我正在测试的端点:
spreadsheets.values.batchUpdate
https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate
我想做的是将 API 中的单元格格式化为纯文本,这与我通过单击 Format > Number > Plain text
[=23= 中的传播sheet 所做的相同]
我应该如何从 API 创建 JSON
以将相同的格式应用于整个列?
这是当我将 sheet 本身的单元格格式设置为 Plain Text
时发生的情况:
- 这是我要格式化的单元格:
- 我就是这样做的:
Format > Number > Plain text
- 这是结果:
当我将 google API:
中的同一单元格格式化为纯文本时会发生这种情况
这是我申请的JSON:
"requests": [
{
"repeatCell": {
"range": {
"sheetId": 3,
"startColumnIndex": 1,
"endColumnIndex": 2,
"startRowIndex": 1,
"endRowIndex": 2
},
"cell": {
"userEnteredFormat": {
"numberFormat": {
"type": "TEXT"
}
}
},
"fields": "userEnteredFormat.numberFormat"
}
}
]
}```
这是结果:
我的问题: 我怎样才能从 API 做我直接从 sheet 做的同样的事情?
我遇到过和你一样的情况。当时,作为一种解决方法,我使用了以下流程。
- 从 sheet 中检索值作为格式化值。
- 将 sheet 上的值作为字符串值。
当这个变通办法反映在脚本中时,它变成如下。
示例脚本:
const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetName = "Sheet1"; // Please set the sheet name.
const sheets = google.sheets({ version: "v4", auth }); // Please use your authorization script.
const values = await sheets.spreadsheets.values.get({
spreadsheetId,
range: sheetName,
valueRenderOption: "FORMATTED_VALUE",
});
const res = await sheets.spreadsheets.values.update({
spreadsheetId,
range: sheetName,
valueInputOption: "RAW",
resource: { values: values.data.values },
});
结果:
使用该脚本时,得到如下结果。
发件人:
收件人:
注:
此示例脚本使用 sheet。如果要使用具体范围,请修改range
.
在此脚本中,数字格式更改为Automatic
。如果您想将其更改为 Plain text
,请使用以下脚本代替上面的脚本。
const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetName = "Sheet1"; // Please set the sheet name.
const sheets = google.sheets({ version: "v4", auth }); // Please use your authorization script.
const sheetId = 0; // Please set the sheet ID of "sheetName".
const values = await sheets.spreadsheets.values.get({
spreadsheetId,
range: sheetName,
valueRenderOption: "FORMATTED_VALUE",
});
const requests = values.data.values.map((r, i) =>
r.map((c, j) => ({
updateCells: {
range: {
sheetId: sheetId,
startRowIndex: i,
endRowIndex: i + 1,
startColumnIndex: j,
endColumnIndex: j + 1,
},
rows: [
{
values: [
{
userEnteredFormat: {
numberFormat: {
type: "TEXT",
},
},
userEnteredValue: {
stringValue: c,
},
},
],
},
],
fields: "userEnteredFormat.numberFormat,userEnteredValue",
},
}))
);
const res = await sheets.spreadsheets.batchUpdate({
spreadsheetId,
resource: { requests },
});
参考文献:
我在查看文档后开始使用 Google Sheets api 进行开发,有几件事我不明白或找不到。
这是我正在测试的端点:
spreadsheets.values.batchUpdate
https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets/batchUpdate
我想做的是将 API 中的单元格格式化为纯文本,这与我通过单击 Format > Number > Plain text
[=23= 中的传播sheet 所做的相同]
我应该如何从 API 创建 JSON
以将相同的格式应用于整个列?
这是当我将 sheet 本身的单元格格式设置为 Plain Text
时发生的情况:
- 这是我要格式化的单元格:
- 我就是这样做的:
Format > Number > Plain text
- 这是结果:
当我将 google API:
中的同一单元格格式化为纯文本时会发生这种情况这是我申请的JSON:
"requests": [ { "repeatCell": { "range": { "sheetId": 3, "startColumnIndex": 1, "endColumnIndex": 2, "startRowIndex": 1, "endRowIndex": 2 }, "cell": { "userEnteredFormat": { "numberFormat": { "type": "TEXT" } } }, "fields": "userEnteredFormat.numberFormat" } } ] }```
这是结果:
我的问题: 我怎样才能从 API 做我直接从 sheet 做的同样的事情?
我遇到过和你一样的情况。当时,作为一种解决方法,我使用了以下流程。
- 从 sheet 中检索值作为格式化值。
- 将 sheet 上的值作为字符串值。
当这个变通办法反映在脚本中时,它变成如下。
示例脚本:
const spreadsheetId = "###"; // Please set the Spreadsheet ID.
const sheetName = "Sheet1"; // Please set the sheet name.
const sheets = google.sheets({ version: "v4", auth }); // Please use your authorization script.
const values = await sheets.spreadsheets.values.get({
spreadsheetId,
range: sheetName,
valueRenderOption: "FORMATTED_VALUE",
});
const res = await sheets.spreadsheets.values.update({
spreadsheetId,
range: sheetName,
valueInputOption: "RAW",
resource: { values: values.data.values },
});
结果:
使用该脚本时,得到如下结果。
发件人:
收件人:
注:
此示例脚本使用 sheet。如果要使用具体范围,请修改
range
.在此脚本中,数字格式更改为
Automatic
。如果您想将其更改为Plain text
,请使用以下脚本代替上面的脚本。const spreadsheetId = "###"; // Please set the Spreadsheet ID. const sheetName = "Sheet1"; // Please set the sheet name. const sheets = google.sheets({ version: "v4", auth }); // Please use your authorization script. const sheetId = 0; // Please set the sheet ID of "sheetName". const values = await sheets.spreadsheets.values.get({ spreadsheetId, range: sheetName, valueRenderOption: "FORMATTED_VALUE", }); const requests = values.data.values.map((r, i) => r.map((c, j) => ({ updateCells: { range: { sheetId: sheetId, startRowIndex: i, endRowIndex: i + 1, startColumnIndex: j, endColumnIndex: j + 1, }, rows: [ { values: [ { userEnteredFormat: { numberFormat: { type: "TEXT", }, }, userEnteredValue: { stringValue: c, }, }, ], }, ], fields: "userEnteredFormat.numberFormat,userEnteredValue", }, })) ); const res = await sheets.spreadsheets.batchUpdate({ spreadsheetId, resource: { requests }, });