【问题标题】:Google Sheets automatically changing date format while setting data in sheet using Google APIs使用 Google API 在工作表中设置数据时,Google 表格会自动更改日期格式
【发布时间】:2021-04-16 11:41:25
【问题描述】:

我正在做一个项目,我需要从 API 收集数据,将它们存储在矩阵中,然后使用 Google-Sheets-APIv4 将该数据设置在 Google 表格中Node.js。该 API 中的两个键是 object.start_date 和 object.end_date,它们以例如 "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);
上面代码中的

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

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

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 格式 如图

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

【问题讨论】:

    标签: node.js google-sheets google-sheets-api


    【解决方案1】:

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

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

    修改点:

    • 例如,当[["2021-01-02", "02/01/2021"]] 的值使用USER_ENTEREDvalueInputOption 的Sheets API 中的“spreadsheets.values.append”方法放入电子表格时,每个值都作为日期对象放入。但好像数字格式不一样。
    • 为了使用相同的数字格式,在这个答案中,我想使用“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 方法可能只需运行一次就可以实现您的目标。

    参考资料:

    【讨论】:

    • 非常感谢@Tanaike 的帮助。该解决方案完美运行。只是多了一个疑问。批量更新后,日期单元格的水平对齐方式变得杂乱无章。有些单元格的右侧有数据,而其他单元格的左侧有数据。如何使水平对齐方式统一?
    • @the_namikaze 感谢您的回复。我带来的不便表示歉意。现在,我在示例脚本中添加了设置单元格水平对齐的请求。你能确认一下吗?例如,如果要设置左对齐,请将horizontalAlignment: "RIGHT"RIGHT修改为LEFTRef
    • 是的,它工作得很好!非常感谢!
    • @the_namikaze 欢迎。谢谢你让我知道。我很高兴你的问题得到了解决。如果您的问题得到解决,请按接受按钮。与您有相同问题的其他人也可以将您的问题作为可以解决的问题。我认为您的问题和解决方案将对他们有用。如果找不到按钮,请随时告诉我。 stackoverflow.com/help/accepted-answer
    • 是的。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多