1

Ich habe ein Skript, das ich in meiner Testumgebung verwendet habe, um programmgesteuert eine Verfolgungsnummer zu erstellen, indem das Jahr vom Zeitstempel analysiert und der Antwortindex aufgefüllt wird .Eine Zeichenfolge des Formulars nnnn-nnnn wird in einer Tabelle als Datum oder sonstwie falsch angezeigt

function setTrackingNumber(ss, lastRowInx, createDateColumn) //This block generates and stores a tracking number in Column AU on the backend 
{ 
    var padTrackNo = "" + lastRowInx; 
    var trackSize = 4; 
    var trackingNumberColumn = createDateColumn-3; //trackingNumberColumn is currently in AU (Column 47) Calculating using it's relative position to createDateColumn Position 

    if (ss.getRange(lastRowInx, trackingNumberColumn).getValue() == "") // so that subsequent edits to Google Form don't overwrite original tracking number 
    { 
    if (padTrackNo > trackSize) 
    { 
     var padTrackNo = pad(padTrackNo, trackSize); 
    } 
    else {} //do nothing 

    var shortYear = setShortYear(ss, lastRowInx, createDateColumn); 
    var trackingNumber = shortYear + "-" + padTrackNo; 
    var createTrackingNumber = ss.getRange(lastRowInx, trackingNumberColumn); 
    createTrackingNumber.setValue(trackingNumber); 
    } 
    else {} //should do nothing 
    return; 
}//This is the end of the setTrackingNumber function 

function setShortYear(ss, lastRowInx, createDateColumn) 
{ 
    var newCreateDate = ss.getRange(lastRowInx,createDateColumn).getValue(); 
    var strDate = "" + newCreateDate; 
    var splitDate = strDate.split(" "); 
    var trimYear = splitDate[3]; 
    var shortYear = trimYear; 

    return shortYear; 
}//This is the end of the shortYear function 

function pad(padTrackNo, trackSize) 
{ 
    while (padTrackNo.length < trackSize) 
    { 
     padTrackNo = "0"+padTrackNo; 
    } 
    return padTrackNo; 
}//This is the end of pad function 

Das hat mich test result bekommt, die wie erwartet ab ist. 2016-0005. Als wir es jedoch zu einem anderen Produktionsblatt hinzufügten, schien es mit den Testdaten zu funktionieren, und dann zeigten sich die Produktionsdaten wie ein Datum 01.03.2016. production result - first cell.

Ich dachte, es muss nur die Zeichenfolge als ein Datum wegen der Zahlen formatieren, so habe ich versucht, die Spalte als Nur-Text formatiert, aber das Datum nur in eine reine Textversion des Datums geändert.

Ich dachte, dies zu benötigen ähnlich sein könnte, das Format, wie ich in dieser Frage Appending initial timestamp from Google Form to end of record in order to permanently store create date onFormSubmit bei @SandyGood ‚s Vorschlag tat so habe ich versucht, das Zahlenformat als [0000-0000] Einstellung von

createTrackingNumber.setValue(trackingNumber); 
Wechsel

zu

createTrackingNumber.setValue(trackingNumber).setNumberFormat("0000-0000"); 

, die in der [Produktionsergebnis - zweite Zelle] geführt, die wiederum nicht das erwartete Ergebnis überein.

Seltsamerweise scheinen einige Eingaben gut zu funktionieren [Produktionsergebnis - dritte Zelle]. In den letzten 3 Tagen und ungefähr 10 Aufzeichnungen war es gut, dann hinky, dann gut, sie hinky, dann wieder gut. Ich bin mir nicht wirklich sicher, was ich sonst noch versuchen soll, dieses seltsame Verhalten zu debuggen.

Hinweis: Ich musste das Datum als String analysieren, da ich Probleme hatte, das Datum korrekt vom Erstellungsdatum zu analysieren, das vom ursprünglichen Zeitstempel übernommen wurde.

Antwort

0

Nach meinem Verständnis ist "2016-0005" keine Zahl, sondern eine Zeichenfolge, daher sollte die Zelle, die sie enthält, als normaler Text formatiert sein. Mit einem Skript kann dies durch

range.setNumberFormat('@[email protected]') 

(source) getan werden, und dies muss vor Sie den Wert in der Zelle gesetzt erfolgen. So:

createTrackingNumber.setNumberFormat('@[email protected]').setValue(trackingNumber); 
Verwandte Themen