Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果名称在列中,请将该列转换为日期格式_Javascript_Google Apps Script_Google Sheets - Fatal编程技术网

Javascript 如果名称在列中,请将该列转换为日期格式

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

上下文

我想动态地将下面各列中的数据格式更改为适当的日期格式:我使用了这段代码,但现在想使其成为动态的。日期列中的原始数字格式是来自google finance的日期/时间格式。但我只想要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 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');
  }
}
虽然后者实际上没有出现在工作表上,但两者都起作用。日期格式仍然保持不变

问题

有人知道动态重新格式化包含“日期”的列的修复方法吗?

说明: 您的目标是确定列是否包含日期对象。如果它包含日期对象,则需要将日期格式从时间戳更改为日期

以下脚本:

  • 将根据
    4th
    行确定每列的类型,如果类型为date或
    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');
        }
  });
}