使用 Google Sheets API batchUpdate 将数据从一个电子表格复制到另一个电子表格时日期格式混乱
Date format messed up while copying data from one spreadsheet to another using Google Sheets API batchUpdate
我正在将数据集从一个电子表格复制到另一个电子表格,除日期外一切正常。
在源文件中,日期类似于“2020-07-27”,但在我 运行 脚本之后,目标文件中的日期格式完全不同,如“Sun Jul 26 18:00:00 GMT- 04:00 2020”。
我应该怎么做才能按原样复制日期 - YYYY-MM-DD?
我的代码:
function myFunction() {
var sheet_source_values = SpreadsheetApp.openById("1JfjXPPFj08p6cxjdsdcBhTMkl6yXLJkhASG0dv4").getSheetByName(Utilities.formatDate(now,"GMT+1", "dd.MM")).getRange('A:AD').getValues()
var sheet_destination = SpreadsheetApp.openById("GTjEfvjoTJ7U7ZXwYUEnSkKtfudXZuCP0dyq").getSheetByName("Updated_sheet")
var request = {
'responseValueRenderOption' : 'UNFORMATTED_VALUE',
'valueInputOption': 'RAW',
'responseDateTimeRenderOption' : 'SERIAL_NUMBER',
'data': [
{
'range': "'Updated_sheet'!" + sheet_destination.getRange(2,1,sheet_source_values.length,sheet_source_values[0].length).getA1Notation(),
'majorDimension': 'ROWS',
'values': sheet_source_values
}
]
};
Sheets.Spreadsheets.Values.batchUpdate(request, "GTjEfvjoTJ7U7ZXwYUEnSkKtfudXZuCP0dyq");
}
我尝试更改“responseValueRenderOption”和“responseDateTimeRenderOption”但可以找到解决方案:(
这里的问题不在于表格 API,而在于您从源传播中检索值的方式sheet.
根据getValues
方法文档:
getValues
- Returns a two-dimensional array of values, indexed by row, then by column. The values may be of type Number
, Boolean
, Date
, or String
, depending on the value of the cell.
这样,值将作为 Date
类型检索,但此类型是 Google 默认类型,因此您在目标 sheet 上获得的结果.
为了解决这个问题,我建议您改用 getDisplayValues
,因为这将 return 来自源 sheet 的显示值。对于 Sheets API 请求,您可以只保留 'valueInputOption': 'RAW'
选项。
已修改sheet_source_values
var sheet_source_values = SpreadsheetApp.openById("1bGCXCUe6cgyLQRUQrOIAT2BruBH95ybAX7iG_pyk4Q0").getSheetByName("Sheet1").getRange('A1:A4').getDisplayValues();
修改后的工作表API请求
var request = {
'valueInputOption': 'RAW',
'data': [{
'range': "'Updated_sheet'!" + sheet_destination.getRange(2, 1, sheet_source_values.length, sheet_source_values[0].length).getA1Notation(),
'majorDimension': 'ROWS',
'values': sheet_source_values
}]
};
参考
我正在将数据集从一个电子表格复制到另一个电子表格,除日期外一切正常。 在源文件中,日期类似于“2020-07-27”,但在我 运行 脚本之后,目标文件中的日期格式完全不同,如“Sun Jul 26 18:00:00 GMT- 04:00 2020”。 我应该怎么做才能按原样复制日期 - YYYY-MM-DD?
我的代码:
function myFunction() {
var sheet_source_values = SpreadsheetApp.openById("1JfjXPPFj08p6cxjdsdcBhTMkl6yXLJkhASG0dv4").getSheetByName(Utilities.formatDate(now,"GMT+1", "dd.MM")).getRange('A:AD').getValues()
var sheet_destination = SpreadsheetApp.openById("GTjEfvjoTJ7U7ZXwYUEnSkKtfudXZuCP0dyq").getSheetByName("Updated_sheet")
var request = {
'responseValueRenderOption' : 'UNFORMATTED_VALUE',
'valueInputOption': 'RAW',
'responseDateTimeRenderOption' : 'SERIAL_NUMBER',
'data': [
{
'range': "'Updated_sheet'!" + sheet_destination.getRange(2,1,sheet_source_values.length,sheet_source_values[0].length).getA1Notation(),
'majorDimension': 'ROWS',
'values': sheet_source_values
}
]
};
Sheets.Spreadsheets.Values.batchUpdate(request, "GTjEfvjoTJ7U7ZXwYUEnSkKtfudXZuCP0dyq");
}
我尝试更改“responseValueRenderOption”和“responseDateTimeRenderOption”但可以找到解决方案:(
这里的问题不在于表格 API,而在于您从源传播中检索值的方式sheet.
根据getValues
方法文档:
getValues
- Returns a two-dimensional array of values, indexed by row, then by column. The values may be of typeNumber
,Boolean
,Date
, orString
, depending on the value of the cell.
这样,值将作为 Date
类型检索,但此类型是 Google 默认类型,因此您在目标 sheet 上获得的结果.
为了解决这个问题,我建议您改用 getDisplayValues
,因为这将 return 来自源 sheet 的显示值。对于 Sheets API 请求,您可以只保留 'valueInputOption': 'RAW'
选项。
已修改sheet_source_values
var sheet_source_values = SpreadsheetApp.openById("1bGCXCUe6cgyLQRUQrOIAT2BruBH95ybAX7iG_pyk4Q0").getSheetByName("Sheet1").getRange('A1:A4').getDisplayValues();
修改后的工作表API请求
var request = {
'valueInputOption': 'RAW',
'data': [{
'range': "'Updated_sheet'!" + sheet_destination.getRange(2, 1, sheet_source_values.length, sheet_source_values[0].length).getA1Notation(),
'majorDimension': 'ROWS',
'values': sheet_source_values
}]
};