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就可以达到你的目的。
参考文献:
我正在做一个项目,我需要从 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 withvalueInputOption
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就可以达到你的目的。