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

Google Sheets automatically changing date format while setting data in sheet using Google APIs

我正在做一个项目,我需要从 API 收集数据,将它们存储在矩阵中,然后使用 [=] 在 Google Sheet 中设置数据30=]Google-Sheets-APIv4 与 Node.js。 API 中的两个关键是 object.start_date 和 object.end_date 其中 return 格式的日期字符串,例如 "2021-09-22" 即。 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);
上面代码中的

tenancy是一个对象。我在控制台中得到的输出是 这是所需的格式,这表明更改日期的算法也能正常工作。

此外,我在 sheet 中添加数据的代码是

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,.......]*/
  });

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

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

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

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

修改点:

  • 例如,当 [["2021-01-02", "02/01/2021"]] 的值使用 spreadsheets.values.append 的方法放入电子表格时 API with valueInputOption of [=14] =],每个值都作为日期对象。不过好像数字格式不一样。
  • 为了使用相同的数字格式,在这个答案中,我想使用“spreadsheets.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);
  • 当上述修改脚本为运行时,“M”至“O”列的数字格式更改为dd/mm/yyyy。这是来自您的示例图片。
  • 如果要修改格式和范围,请修改上面的脚本。
  • 而且,在上面的脚本中,batchUpdate 方法反映了列“M”到“O”的所有行。所以我认为在这种情况下,这个batchUpdate方法可能只需要一次运行ning就可以达到你的目的。

参考文献: