在Google电子表格中格式化日期

时间:2013-02-21 20:15:31

标签: google-apps-script spreadsheet

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

我需要此日期列可以排序,但电子表格不会将其识别为日期,而只是字符串。 (它会认出“Jan-26-2013”​​,我试过了。) 所以我需要重新格式化输入日期。

我的问题是:我怎么能这样做?我环顾四周,谷歌应用程序脚本看起来像是要走的路(虽然我还没有找到重新格式化的好例子)。 不幸的是,我唯一的编程经验是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)
}

对于像我这样其他困惑的谷歌脚本新手:

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

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

重要提示:只有在相关工作表底部有空行时,脚本才会生效!

2 个答案:

答案 0 :(得分:1)

只是一个想法:

如果您双击电子表格中的日期字符串,您会看到它的真实值使其成为字符串而不是日期对象是'Jan 26, 2013,字符串前面有'我没有在这里添加...(表单可以让你在文本区域输入你想要的内容,包括+322475 ...例如,如果是电话号码,这是电子表格单元格中的一个已知技巧你可以简单地创建一个运行on form submit并删除单元格中'的脚本,我想电子表格会完成其余的工作......(我没有测试过,所以试一试并认为这是一个建议)。

要删除',您只需使用.replace() method **

var newValue = value.replace(/'/g,'');

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


按照您的评论编辑:

它可能更简单,因为如果找不到匹配,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)
}

此外,您在代码中使用了",大概是故意的......我的测试显示'。是什么让你做出这个选择?

答案 1 :(得分:0)

解决了这个问题,我只需将逗号更改为点,就可以了。