Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
Datetime 在google电子表格中重新格式化日期_Datetime_Google Apps Script_Google Sheets - Fatal编程技术网

Datetime 在google电子表格中重新格式化日期

Datetime 在google电子表格中重新格式化日期,datetime,google-apps-script,google-sheets,Datetime,Google Apps Script,Google Sheets,我正在为其他人设置一个电子表格,用表格输入数据。 其中一列应该包含一个日期。输入日期格式如以下示例:“2013年1月26日”(收集数据需要大量复制和粘贴,因此在输入步骤更改格式不是一个实际选项) 我需要对这个日期列进行排序,但是电子表格不能将其识别为日期,而只是将其识别为字符串。(我试过,它会识别“2013年1月26日”。) 所以我需要重新格式化输入日期 我的问题是:我该怎么做?我环顾四周,谷歌应用程序脚本看起来是一个不错的选择(尽管我还没有找到一个重新格式化的好例子)。 不幸的是,我唯一的编程

我正在为其他人设置一个电子表格,用表格输入数据。 其中一列应该包含一个日期。输入日期格式如以下示例:“2013年1月26日”(收集数据需要大量复制和粘贴,因此在输入步骤更改格式不是一个实际选项)

我需要对这个日期列进行排序,但是电子表格不能将其识别为日期,而只是将其识别为字符串。(我试过,它会识别“2013年1月26日”。) 所以我需要重新格式化输入日期

我的问题是:我该怎么做?我环顾四周,谷歌应用程序脚本看起来是一个不错的选择(尽管我还没有找到一个重新格式化的好例子)。 不幸的是,我唯一的编程经验是Python,并且是中级的。我可以用Python毫无问题地完成这项工作,但我不懂任何JavaScript。 (我的Python方法是:

splitted = date.split()
newdate = "-".join([splitted[0], splitted[1][:-1], splitted[2]])
return newdate
)

我也不知道如何将脚本链接到电子表格-我会将其附加到单元格、表单或何处?怎么做?关于这一点,任何指向有用的、可理解的教程等的链接都会非常有帮助

非常感谢您的帮助

编辑:以下是我最后得到的代码:

//Function to filter unwanted " chars from date entries
function reformatDate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startrow = 2;
  var firstcolumn = 6;
  var columnspan = 1;
  var lastrow = sheet.getLastRow();
  var dates = sheet.getRange(startrow, firstcolumn, lastrow, columnspan).getValues();
  newdates = []
  for(var i in dates){
    var mydate = dates[i][0];
    try
      {
      var newdate = mydate.replace(/"/g,'');
      }
    catch(err)
      {
      var newdate = mydate
      }
     newdates.push([newdate]);
  }
  sheet.getRange(startrow, firstcolumn, lastrow, columnspan).setValues(newdates)
}
对于其他像我这样困惑的谷歌脚本新手:

  • 通过从电子表格中创建脚本(工具=>脚本编辑器),将脚本附加到电子表格中。仅仅把函数放进去就足够了,你似乎不需要函数调用等等

  • 从脚本编辑器中选择脚本的触发器(参考资料=>此项目的触发器)

重要提示:只有当工作表底部有空行时,脚本才会工作

只是一个想法:

如果您双击电子表格中的日期字符串,您将看到,使其成为字符串而不是日期对象的实际值是this
'2013年1月26日
,在我没有添加到此处的字符串前面有
'
。。。(表单这样做是为了允许您在文本区域中键入所需内容,包括+322475…例如,如果是电话号码,这是电子表格单元格中的一个已知技巧)您只需创建一个脚本运行并删除单元格中的
,我想电子表格就可以完成其余工作。。。(我没有测试过,所以试着把它当作一个建议)。< /P> 要删除
,只需使用
.replace()

以下是相关文档的一些链接:


编辑以下评论:

//Function to filter unwanted " chars from date entries
function reformatDate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startrow = 2;
  var firstcolumn = 6;
  var columnspan = 1;
  var lastrow = sheet.getLastRow();
  var dates = sheet.getRange(startrow, firstcolumn, lastrow, columnspan).getValues();
  newdates = []
  for(var i in dates){
    var mydate = dates[i][0];
    try
      {
      var newdate = mydate.replace(/"/g,'');
      }
    catch(err)
      {
      var newdate = mydate
      }
     newdates.push([newdate]);
  }
  sheet.getRange(startrow, firstcolumn, lastrow, columnspan).setValues(newdates)
}
如果没有找到匹配项,
replace
不会生成错误,因此可以这样做:

function reformatDate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dates = sheet.getRange(2, 6, sheet.getLastRow(), 1).getValues();
  newdates = []
  for(var i in dates){
    var mydate = dates[i][0];
      var newdate = mydate.replace(/"/g,'');
     newdates.push([newdate]);
  }
  sheet.getRange(2, 6, sheet.getLastRow(), 1).setValues(newdates)
}
另外,您在代码中使用了
,可能是故意的……我的测试显示了
。是什么让您做出这个选择的?

只是一个想法:

如果您双击电子表格中的日期字符串,您将看到,使其成为字符串而不是日期对象的实际值是this
'2013年1月26日
,在我没有添加到此处的字符串前面有
'
。。。(表单这样做是为了允许您在文本区域中键入所需内容,包括+322475…例如,如果是电话号码,这是电子表格单元格中的一个已知技巧)您只需创建一个脚本运行并删除单元格中的
,我想电子表格就可以完成其余工作。。。(我没有测试过,所以试着把它当作一个建议)。< /P> 要删除
,只需使用
.replace()

以下是相关文档的一些链接:


编辑以下评论:

//Function to filter unwanted " chars from date entries
function reformatDate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var startrow = 2;
  var firstcolumn = 6;
  var columnspan = 1;
  var lastrow = sheet.getLastRow();
  var dates = sheet.getRange(startrow, firstcolumn, lastrow, columnspan).getValues();
  newdates = []
  for(var i in dates){
    var mydate = dates[i][0];
    try
      {
      var newdate = mydate.replace(/"/g,'');
      }
    catch(err)
      {
      var newdate = mydate
      }
     newdates.push([newdate]);
  }
  sheet.getRange(startrow, firstcolumn, lastrow, columnspan).setValues(newdates)
}
如果没有找到匹配项,
replace
不会生成错误,因此可以这样做:

function reformatDate() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var dates = sheet.getRange(2, 6, sheet.getLastRow(), 1).getValues();
  newdates = []
  for(var i in dates){
    var mydate = dates[i][0];
      var newdate = mydate.replace(/"/g,'');
     newdates.push([newdate]);
  }
  sheet.getRange(2, 6, sheet.getLastRow(), 1).setValues(newdates)
}

另外,您在代码中使用了
,可能是故意的……我的测试显示
相反。是什么让您做出了这个选择?

解决了它,我只需将逗号改为点,它就起作用了解决了它,我只需将逗号改为点,它就起作用了很高兴听到我的回答很有帮助:-)@谢尔盖:是的,谢谢!我昨天不知怎么的无法评论或投票/接受。上面的代码对你来说是合理的还是不必要的复杂?(因为我对JavaScript一无所知,我希望得到反馈。)我编辑了我的答案,比在评论中更容易听到我的答案:-)@Serge:是的,是的,谢谢!我昨天不知何故无法发表评论或投票/接受。你觉得上面的代码合理吗?还是不必要的复杂?(因为我对JavaScript一无所知,我希望得到反馈。)我编辑了我的答案,这比在评论中简单。我更改了引号,因为我发现在我正在处理的电子表格中,这是实际使用的引号(这正是我想要的)和日期对象似乎不支持“替换”功能。因此,该功能的其余部分是有意义的?这是一个巨大的解脱,谢谢!:-)谢谢补充信息;-),你说得对,我没有想到手机已经是约会对象了……所以,try/catch是一种方式……另一种可能的方式是使用typeOf()看看它是否是字符串。关于引号,我想知道为什么您的电子表格不同?到目前为止,我还不知道,如果我找到什么东西,我会在这里更新。无论如何,现在结案;-)我更改了引号,因为我发现在我正在处理的电子表格中,这是实际使用的引号。至于try/catch:我尝试了它,但没有使用,但每当使用“mydate”时都会出错