0

我正在使用表格为其他人设置电子表格以输入数据。其中一列应该包含一个日期。输入日期格式如以下示例:“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)
}

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

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

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

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

4

2 回答 2

2

只是一个想法:

如果您双击电子表格中的日期字符串,您将看到使其成为字符串而不是日期对象的真正值是在我没有在此处添加的字符串前面...('Jan 26, 2013 表格'这样做是为了让您在文本区域中输入您想要的内容,包括 +322475... 例如,如果它是一个电话号码,这是电子表格单元格中的一个已知技巧)您可以简单地制作一个在表单提交和删除'单元格中的,我想电子表格会完成剩下的工作......(我没有测试过,所以试一试并将其视为建议)。

要删除,'您可以简单地使用.replace() 方法**

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)
}

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

于 2013-02-21T21:18:45.707 回答
1

解决了,我只需要将逗号更改为点就可以了

于 2017-01-04T10:30:13.503 回答