2016-04-05 11 views
0

İlk zaman damgasının üzerine yazılmadığı google form yanıtlarının oluşturulma tarihini kaydetmeye (kayda ekleyerek) erişebilmem gerekir. form düzenlendiğinde Bu form Google'da barındırılıyor ve bir Google Apps İşletme Sürümü ortamında.Oluşturma tarihini kalıcı olarak saklamak için Google Form'dan başlangıç ​​zaman damgasını kayıt tarihine eklemeFormSubmit

Bu bilgi var ancak bir noktada form güncelleştirmesi üzerine dökülüyor. Bu, analitik amaçlar için oluşturulduktan sonra düzenlenmiş Google Formlarını kullanan kişilere geniş bir uygulama getirecek gibi görünüyor.

Bu Google Docs Forum, benimkiyle oldukça benzer bir durumu açıklar ancak kullandıkları kodu içermediler.

google geliştirici sitesinden kazdık ve bu işlevi uygulamamın en iyi yolunun, referans vermek istediğim alandan (Zaman damgası) bulunmaması nedeniyle formun kendisinden ziyade yanıt e-tablosunda bir onFormSubmit tetikleyicisi kullanmak olduğunu belirledim. google sayfasına yazılana kadar seçilemiyorum ve sonucu yine de e-tablodaki yeni bir sütunda saklamak istiyorum.

this solution başvurusunu denedim ve çözmeyi denediğim soruna en yakın kod snippet'i olduğu için amacım için değiştirmeyi denedim.

Benim yorum yazdığım kod. Yine de, benim ve başka bir deyişle, benim ve benim kodumda createDateColumn gibi adresleme ihtiyacım olan şeyler olsa da, bunları çalıştırmadan çalıştırabildim (e-tabloya bağlı Google App Script'de çalışma menüsünü kullanarak) ancak yazması gereken hücre Bazı nedenlerden dolayı zaman damgası artık betiğin çalıştırılmasından sonra "Aralık" değerine sahiptir, bu yüzden değeri hatalı olarak ayarlıyorum.

Ayrıca forma yeni bir giriş eklemeyi denedim, ancak onFormSubmit kendi başına çalışmadı, bu nedenle başka karşılanmamış sorunlar da olabilir.

Herhangi bir yardım için teşekkür ederiz. Kodlama yeteneklerim biraz paslı.

function onFormSubmit(e) 
{ 
    var ss = SpreadsheetApp.getActiveSheet(); 

    var lastRowInx = ss.getLastRow(); // Get the row number of the last row with content 
    var createDateColumn = 50; //CreateDateColumn is currently in AX (Column 50) Possibly find named range since hardcoded isn't ideal. LastColumn doesn't work because some responses not required 

// if() condition should be ss.getRange(lastRowInx, createDateColumn) == ""; so that subsequent edits to Google Form which trigger timestamp updates don't overwrite original create date 
    //{ 
    var timestamp = ss.getRange(lastRowInx, 1); // Get timestamp entry 
    var createDate = ss.getRange(lastRowInx, createDateColumn); 
    createDate.setValue(timestamp); 
    //} 
    //else {} //should be do nothing 
} 

**** GÜNCELLEME **** Çalışıyor ! Yardımınız için teşekkürler @Sandy.

Daha önce bahsettiğim diğer sorunları düzeltmek için, forFormSubmit'teki diğer birkaç görevi yaptığım için kodu modülerleştirdim ve createDate'i başka bir işlevde kullanmak istedim. Not: Kod snippet'inden diğer işlevleri de soruya uygulanmadıklarından kaldırdım.

Ayrıca, sütun numarasını kodlamak yerine getMaxColumns() kullandım. bu bir dizi var, şu anda

var timestamp = ss.getRange(lastRowInx, 1).getValue(); 

:

var timestamp = ss.getRange(lastRowInx, 1); 

için: Burada

function onFormSubmit(e) 
{ 
var ss = SpreadsheetApp.getActiveSheet(); 
var lastRowInx = ss.getLastRow(); // Get the row number of the last row with content 
var createDateColumn = ss.getMaxColumns(); //CreateDateColumn is currently in AX (Column 50) which is the last/max column position 

    var createDate = setCreateDate(ss, lastRowInx, createDateColumn); 
}//This is the end of onFormSubmit 
function setCreateDate(ss, lastRowInx,createDateColumn) // Stores the create date timestamp in Column AV on the backend 
{ 
    if (ss.getRange(lastRowInx, createDateColumn).getValue() == "") // so that subsequent edits to Google Form which trigger timestamp updates don't overwrite original create date 
    { 
    var timestamp = ss.getRange(lastRowInx, 1).getValue(); // Get timestamp entry which is currently in A (Column 1) 
    var setDate = ss.getRange(lastRowInx, createDateColumn); 
    var createDate = new Date(timestamp); 
    setDate.setValue(createDate).setNumberFormat("MM/dd/yyyy hh:mm:ss"); 
    } 
    else {} //should do nothing 
    return createDate; 
}//This is the end of setCreateDate function 
+0

Kaynaklar menüsünde etkinlik tetikleyicisi eklendiğinde tetiklenmedi. @ @ Sandy-good'in çözünürlüğü saklanacak değeri aldı. Teşekkürler (Bazen geriye dönük olarak çok belirgin görünen bir şeydir. Ancak, sütun saklama tarihi süresinde biçimlendirme korunmuyor. Hala seçildiğini (ve bilgi mevcut) söylese de, biçimlendirme el ile yeniden uygulanmadıkça zaman göstermez. Düşüncesi olan var mı? – SavageTiner

+0

Tüm sütunu vurgulamak için sütun başlığını tıklatarak sütunun tamamı için biçimlendirmeyi ayarlayabilir ve ardından veri biçimini ayarlayabilirsiniz. Bunun senin problemini çözüp çözemeyeceğinden emin değilim, ama bu benim ilk fikrimdi. –

+0

Evet Bunu yaptım @Sandy. Bu, betiğin yeni değerin ne zaman formata uymadığını belirlediğimi biliyorum. Biçimlendirmeyi hücre veya sütuna yeniden uygularsam, ancak varsayılan olarak uygun değil. Biraz daha googling deneyeceğim. Değilse en kötüsü değildir, çünkü veriler hala garip bir yan ürün var. – SavageTiner

cevap

1

Değişim ileride kullanıcının kullanımına bunun için güncellenmiş koddur.

+0

Aslında sizi etiketleyip etiketlemediğinden emin değilim. Yardımın için teşekkürler. Kalan biçimlendirme konusunda herhangi bir fikir (Yukarıdaki güncelleme yorumuna bakın) – SavageTiner

İlgili konular