2013-02-21 124 views
0

我正在为其他人使用表单设置电子表格来输入数据。 其中一列应该包含日期。输入日期格式就像这个例子:“2013年1月26日”(将会有很多复制&粘贴涉及到收集数据,所以改变输入步骤的格式不是一个真正的选择)。在Google电子表格中重新格式化日期

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

我的问题是:我该怎么做?我环顾四周,谷歌应用程序脚本看起来像要走的路(尽管我还没有找到一个很好的例子重新格式化)。 不幸的是,我唯一的编程经验是Python和中级。我可以在没有问题的情况下在Python中执行此操作,但我不知道任何JavaScript。 (我的Python的做法是:

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

我也不知道我怎么会去有关脚本链接到电子表格 - 我会附加到单元格,或形式,还是在哪里?如何?任何链接到一个有用的,可以理解的教程等在这一点上会有很大帮助。

任何帮助非常感谢! Lastalda

编辑:这是我结束了代码:

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

对于其他迷惑谷歌脚本新手跟我一样:

  • 安装脚本到电子表格的工作原理从电子表格内创建脚本(工具=>脚本编辑器)。只需将函数放在那里就足够了,您似乎不需要函数调用等。

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

重要:,如果有一个空行的表有问题底部的脚本才起作用!

+0

很高兴听到我的回答对您有所帮助:-) – 2013-02-28 07:08:10

+0

@Serge:是的,这就是,谢谢!我以某种方式无法评论或upvote /昨天接受。上面的代码对您来说看起来是否合理或者是不必要的复杂? (因为我对JavaScript没有任何了解,所以我会很感激的。) – Lastalda 2013-02-28 09:02:34

+0

我编辑了我的答案,它比评论中更容易 – 2013-02-28 10:15:42

回答

1

只是一个想法:

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

要删除',你可以简单地使用.replace()method **

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

这里有一些链接到相关的文档:link1link2


编辑以下您的评论:

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

而且,你在你的代码中使用的",想必对目的...我的测试结果显示'代替。是什么让你做出这个选择?

+0

啊,我明白了!感谢指针! – Lastalda 2013-02-28 08:49:17

+0

我改变了引号,因为我发现在我正在处理的电子表格中,这是实际使用的引号。至于try/catch:我没有尝试过,但是当'mydate'已经'''-free时就会出错,因为它们会自动转换为Date对象(这就是我的意图)和Date对象不会'这似乎是支持'替换'的功能,所以其余的功能是有道理的吗?这是一个巨大的解脱,谢谢!:-) – Lastalda 2013-03-01 07:47:51

+0

感谢您的补充信息;-),你是对的,我没有'不要考虑单元格已经是日期的情况了......所以,try/catch是一种可行的方法......,另一种可能的方法是使用typeOf()来查看它是否是一个字符串。引号,我想知道为什么你的电子表格是不同的?到目前为止我还没有想过,如果有的话我会在这里找到一些我要更新的东西。 – 2013-03-01 08:37:02

0

解决了这个问题,我不得不改变逗号点和它的工作