2013-02-21 103 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

解決了這個問題,我不得不改變逗號點和它的工作