使用nodeJS为Google表单api设置一个格式化的日期单元格



我正试图通过插入日期来更新我的谷歌工作表。我想为不同的单元格设置不同的格式。使用nodeJS api,我有一个类Sheet,在另一个类中使用SpreadSheet,它包含电子表格信息以进行批更新

import {sheets_v4} from "googleapis";
type DatePattern = "dd-mm-yyyy" | "hh:mm:ss" | "dd-mm-yyyy hh:mm:ss" | string
type DateType = "DATE" | "TIME" | "DATE_TIME"
export class Sheet {
private request: sheets_v4.Schema$Request[] = []
/**
*
* @param columnIndex {number} Index of the column (Starting from 0)
* @param rowIndex {number} Index of the row (Starting from 0)
* @param value {string}
*/
setPercentFormula(columnIndex: number, rowIndex: number, value: string) {
this.request.push({
updateCells: {
fields: 'userEnteredValue,userEnteredFormat',
range: {
sheetId: this.sheetId,
startColumnIndex: columnIndex,
endColumnIndex: columnIndex + 1,
startRowIndex: rowIndex,
endRowIndex: rowIndex + 1,
},
rows: [
{
values: [
{
userEnteredValue: {
formulaValue: value
},
userEnteredFormat: {
numberFormat: {
type: "PERCENT",
pattern: "#0.00%;-#0.00%;0%"
}
}
},
]
},
]
}
})
return this
}
/**
*
* @param columnIndex {number} Index of the column (Starting from 0)
* @param rowIndex {number} Index of the row (Starting from 0)
* @param value {string}
* @param type {DateType}
* @param pattern {DatePattern} Pattern format
*/
setDateWithPatternCell(columnIndex: number, rowIndex: number, value: string, type: DateType, pattern: DatePattern) {
this.request.push({
updateCells: {
fields: 'userEnteredValue,userEnteredFormat',
range: {
sheetId: this.sheetId,
startColumnIndex: columnIndex,
endColumnIndex: columnIndex + 1,
startRowIndex: rowIndex,
endRowIndex: rowIndex + 1,
},
rows: [
{
values: [
{
userEnteredValue: {
stringValue: value,
},
userEnteredFormat: {
numberFormat: {
type: type,
pattern: pattern
}
}
},
]
},
]
}
})
return this
}
}

我还有其他实用函数,例如布尔值或公式。所有这些操作都将操作放入请求数组中,然后在batchUpdate调用中使用此数组。例如,setPercentFormula的使用效果非常好。

我的工作表中的结果是一个单元格,它有一个起始昏迷,然后是我函数的值参数中给定的字符串形式的日期。

我的格式似乎没有被考虑在内。

由于它是一种数字格式,我也尝试使用userEnteredValue: { numberValue: value }并给它一个时间戳作为输入,但结果是在单元格中设置了数字,而没有日期。

我还试图通过在请求数组中放入两个值来进行单独的调用。一个设置字符串,另一个设置格式。结果相同。

因此,我希望我的工作表上有我的日期值,就好像我手动进入文件并单击Format > Number > Date一样。没有起始昏迷和被识别为日期的值。

以下是我尝试过的一些输入:

  • Sheet.setDateWithPatternCell(0, 0, '2022-08-10', 'DATE', 'yyyy-mm-dd')
  • Sheet.setDateWithPatternCell(0, 0, Date.now(), 'DATE', 'yyyy-mm-dd')
  • Sheet.setDateWithPatternCell(0, 0, Date.now(), 'DATE_TIME', 'yyyy-mm-dd hh:mm:ss')

我希望谷歌工作表中的输出是指定格式的日期。不是字符串(正如我在工作表中看到的,它以值中的'开头(

我相信您的目标如下。

  • 您希望使用Sheets API将日期对象放入具有预期格式的单元格中

很遗憾,从您的问题中,我找不到您的columnIndex, rowIndex, value, type, pattern测试值。因此,在这个答案中,我想为实现您的目标提出一个示例请求机构。

当";updateCells";请求,方法为spreadsheets.batchUpdate,示例请求正文如下。

示例请求正文:

{
"requests": [
{
"updateCells": {
"fields": "userEnteredValue,userEnteredFormat",
"range": {
"sheetId": 0,
"startColumnIndex": 0,
"endColumnIndex": 1,
"startRowIndex": 0,
"endRowIndex": 1
},
"rows": [
{
"values": [
{
"userEnteredValue": {
"numberValue": 44803
},
"userEnteredFormat": {
"numberFormat": {
"type": "DATE_TIME",
"pattern": "dd-mm-yyyy hh:mm:ss"
}
}
}
]
}
]
}
}
]
}
  • 44803是序列号。请小心。

  • 当该请求体与spreadsheets.batchUpdate的方法一起使用时,30-08-2022 00:00:00被放入小区";A1〃;作为日期对象的CCD_ 13的纸张ID的值。

  • 例如,当模式、类型和值分别为dd-mm-yyyyDATE44803时,30-08-2022被放入单元格。

  • 作为另一种方法,当使用spreadsheets.values.update方法时,您也可以使用以下脚本。在这种情况下,30-08-2022 00:00:00被置于小区"1";A1〃;的";Sheet1";作为日期对象。

    sheets.spreadsheets.values.update({
    spreadsheetId: "###", // Please set your Spreadsheet ID.
    range: "Sheet1!A1",
    valueInputOption: "USER_ENTERED",
    resource: { values: [["30-08-2022 00:00:00"]] },
    });
    

参考文献:

  • 方法:spreadsheets.batchUpdate
  • 方法:spreadsheets.values.update

最新更新