Datetime 在google电子表格中重新格式化日期
我正在为其他人设置一个电子表格,用表格输入数据。 其中一列应该包含一个日期。输入日期格式如以下示例:“2013年1月26日”(收集数据需要大量复制和粘贴,因此在输入步骤更改格式不是一个实际选项) 我需要对这个日期列进行排序,但是电子表格不能将其识别为日期,而只是将其识别为字符串。(我试过,它会识别“2013年1月26日”。) 所以我需要重新格式化输入日期 我的问题是:我该怎么做?我环顾四周,谷歌应用程序脚本看起来是一个不错的选择(尽管我还没有找到一个重新格式化的好例子)。 不幸的是,我唯一的编程经验是Python,并且是中级的。我可以用Python毫无问题地完成这项工作,但我不懂任何JavaScript。 (我的Python方法是:Datetime 在google电子表格中重新格式化日期,datetime,google-apps-script,google-sheets,Datetime,Google Apps Script,Google Sheets,我正在为其他人设置一个电子表格,用表格输入数据。 其中一列应该包含一个日期。输入日期格式如以下示例:“2013年1月26日”(收集数据需要大量复制和粘贴,因此在输入步骤更改格式不是一个实际选项) 我需要对这个日期列进行排序,但是电子表格不能将其识别为日期,而只是将其识别为字符串。(我试过,它会识别“2013年1月26日”。) 所以我需要重新格式化输入日期 我的问题是:我该怎么做?我环顾四周,谷歌应用程序脚本看起来是一个不错的选择(尽管我还没有找到一个重新格式化的好例子)。 不幸的是,我唯一的编程
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)
}
对于其他像我这样困惑的谷歌脚本新手:
- 通过从电子表格中创建脚本(工具=>脚本编辑器),将脚本附加到电子表格中。仅仅把函数放进去就足够了,你似乎不需要函数调用等等
- 从脚本编辑器中选择脚本的触发器(参考资料=>此项目的触发器)
'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”时都会出错