Google Sheet在使用Google API设置工作表中的数据时自动更改日期格式

人气:1,000 发布:2022-10-16 标签: node.js google-sheets google-sheets-api

问题描述

我正在处理一个项目,在该项目中我需要从API收集数据,将其存储在矩阵中,并使用google-Sheets-APIV4和Node.js在Google工作表中设置该数据。API中两个关键字是对象开始日期和对象结束日期,它们以例如2021-09-22和ie的格式返回日期字符串。YYYY-MM-DD。我要将该日期转换为dd/mm/yyyy格式。我为此实现的函数是:

function changeDateFormat(dateString){
  let a=dateString.split('-');
  let t=a[0];
  a[0]=a[2];
  a[2]=t;
  //console.log(a.join('/'));
  return `${a.join('/')}`;
}

代码运行良好,我使用它的方式如下所示:

 let checkin=`${changeDateFormat(`${tenancy.start_date}`)}`;
 console.log(checkin);
 let checkout=`${changeDateFormat(`${tenancy.end_date}`)}`;
 console.log(checkout);
上述代码中的

租户是一个对象。我在控制台中得到的输出是 哪种是所需的格式,这表明更改日期的算法也运行良好。

另外,我在工作表中添加数据的代码是

await googleSheets.spreadsheets.values.append({
    auth,
    spreadsheetId,
    range:"MySheet!A2:AC",
    valueInputOption:"USER_ENTERED",
    resource: {values : newData} 
/*newData is a 2-D array where each row has several data fields in the form newData[i]=[propertyName,id,......,check-in,checkout,.......]*/
  });

但是,当我在工作表中添加数据时,日期字段完全混乱,其中一些具有所需的dd/mm/yyyy格式,而另一些具有相同的yyyy-mm-dd格式,如图

我无法解决这个问题,因为我也找不到代码中的任何错误,但输出完全混乱,因为它在某些单元格中工作,但在其他单元格中不工作。解决此问题的可能解决方法是什么?如果需要,我很乐意提供有关问题或我的代码的任何其他信息或数据。谢谢!

推荐答案

我相信您的目标和您的情况如下。

您要将单元格的数字格式设置为dd/mm/yyyy。 您希望使用Node.js的googleapis来实现此目的。 您已经能够使用Sheets API获取和放置Google电子表格的值。

修改点:

例如,当[["2021-01-02", "02/01/2021"]]的值在USER_ENTEREDvalueInputOption的表API中使用";spadsheets.values.append";的方法放入电子表格时,每个值都被放入Date对象。但数字格式似乎不同。 为了使用相同的数字格式,在此答案中,我想使用";spadsheets.BatchUpdate";的方法将dd/mm/yyyy的数字格式设置为单元格。

当上述要点反映到您的脚本中时,它将如下所示。

修改后的脚本:

请设置sheetId的值。

await googleSheets.spreadsheets.values.append({
  auth,
  spreadsheetId,
  range: "MySheet!A2:AC",
  valueInputOption: "USER_ENTERED",
  resource: { values: newData },
});

const sheetId = "###";  // <--- Please set the sheet ID of "MySheet".
const resource = {
  auth,
  spreadsheetId,
  resource: {
    requests: [
      {
        repeatCell: {
          range: {
            sheetId: sheetId,
            startRowIndex: 1,
            startColumnIndex: 12,
            endColumnIndex: 15,
          },
          cell: {
            userEnteredFormat: {
              numberFormat: {
                pattern: "dd/mm/yyyy",
                type: "DATE",
              },
              horizontalAlignment: "RIGHT", // <--- Added
            },
          },
          fields: "userEnteredFormat",
        },
      },
    ],
  },
};
await googleSheets.spreadsheets.batchUpdate(resource);
运行上述修改后的脚本时,将列&Q;M&Q;的编号格式更改为dd/mm/yyyy。这是您的示例图像中的内容。 如果要修改格式和范围,请修改上面的脚本。 ,在上面的脚本中,BatchUpdate方法反映了列&Quot;M";到";O";的所有行。所以我认为在这种情况下,这个BatchUpdate方法可能只运行一次就可以达到您的目标。

引用:

Method: spreadsheets.values.append Method: spreadsheets.batchUpdate RepeatCellRequest

721