Javascript 如果名称在列中,请将该列转换为日期格式
上下文 我想动态地将下面各列中的数据格式更改为适当的日期格式:我使用了这段代码,但现在想使其成为动态的。日期列中的原始数字格式是来自google finance的日期/时间格式。但我只想要dd/mm/yyyy格式 这是我的原始代码:Javascript 如果名称在列中,请将该列转换为日期格式,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,上下文 我想动态地将下面各列中的数据格式更改为适当的日期格式:我使用了这段代码,但现在想使其成为动态的。日期列中的原始数字格式是来自google finance的日期/时间格式。但我只想要dd/mm/yyyy格式 这是我的原始代码: function Dateformats() { var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); // Within the values copied spreadsheet, colum
function Dateformats() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Within the values copied spreadsheet, columns that have 'Date' will be the subject of this function
var sheet = spreadsheet.getSheetByName('Values (Live Data copied)')
// var sheet = spreadsheet.getSheetByName("Values (Live Data copied)")
var dataList = sheet.getRangeList(['A:A', 'C:C', 'E:E', 'G:G', 'I:I', 'K:K', 'M:M', 'O:O']);
dataList.setNumberFormat('dd/MM/yyyy');
}
动态结果的新代码
function Dateformats() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
// Within the values copied spreadsheet, columns that have 'Date' will be the subject of this function
var range = spreadsheet.getRangeByName('Values (Live Data copied)!Date')
if(range !== null){
range.setNumberFormat('dd/MM/yyyy');
}
}
虽然后者实际上没有出现在工作表上,但两者都起作用。日期格式仍然保持不变
问题
有人知道动态重新格式化包含“日期”的列的修复方法吗?说明:
您的目标是确定列是否包含日期对象。如果它包含日期对象,则需要将日期格式从时间戳更改为日期
以下脚本:
- 将根据
行确定每列的类型,如果类型为date或4th
false,则返回
。我使用此条件检查日期元素:true
typeof em.getMonth==='function'
- 类型为
的列设置整个列的格式date
请再次注意,我使用
4th
行来确定每列的类型。因此,此行应包含与同一列中其余单元格相同的类型。也就是说,如果列包含多种类型的数据,解决方案将不起作用。在您提供的第二个代码段中,您还需要传递一个命名范围,而不是工作表名称。如果range
为空,您不会得到任何错误,但这并不意味着您的脚本可以工作。它只是不做任何事情,也不会产生任何错误。谷歌什么是命名范围或阅读以了解什么是命名范围。另外,第二个代码段不会为您提供“动态”解决方案,因为您仍然需要单独为列创建命名范围,这又是一项手动工作。因此,我仍然需要输入我希望包含的列?如果我使用getRange()函数查看整个电子表格以查找包含此文本的列,会怎么样?另外,根据您的第一次回答更新了问题
function Dateformats() {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const sheet = spreadsheet.getSheetByName('Values (Live Data copied)')
const checkTypes = sheet.getRange(4,1,1,sheet.getLastColumn()).
getValues().
flat().
map(em=>typeof em.getMonth === 'function');
checkTypes.forEach((ct,i)=>{
if(ct){
sheet.getRange(4,i+1,sheet.getMaxRows(),1).
setNumberFormat('dd/MM/yyyy');
}
});
}