Ich weiß, dass Sie mit Ihrer Lösung zufrieden sind, wie es steht, aber ich wollte nur meine Beobachtungen, wie Google Apps Script beschäftigt sich mit „dates“ hinzuzufügen, entweder in einer benutzerdefinierten Funktion übergeben, oder abgerufen aus einer Zelle mit getValue().
Faust Meine Regel ist, dass, wenn Sheets (das Tabellenkalkulationsprogramm) ist ein Wert Bereitstellung als Datum formatiert (entweder durch automatische Zwang oder der Benutzer das Format einstellen), dann Google Apps Script automatisch diesen Wert halten als ein Datumsobjekt.
ZB:
function returnDate(value) {
return new Date(value);
}
Wenn Sie 1/1/13
in A1 eingeben und in einer anderen Zelle, die Sie aufrufen =returnDate(A1)
, wird es das gleiche Datum zurückkehren (wie wäre es, wenn Sie einfach return value;
im Code hatte). Beachten Sie jedoch, was passiert, wenn Sie A1 als "Normal" formatieren (konvertieren Sie es in einen numerischen Wert). Hier wird die "Sheets-Seriennummer" (Anzahl der Tage ab dem 30.12.1899) von Google Apps Script in ein Datumsobjekt konvertiert, in GAS wird sie jedoch ab Mitternacht des 1.1.1970 als die Anzahl der Millisekunden "betrachtet" . Sie erhalten also möglicherweise unerwartete Ergebnisse, wenn Sie numerische Werte übergeben, von denen Sie glauben, dass sie für ein Datum repräsentativ sind.
Vergleichen Sie auch:
=returnDate(DATE(2013;1;1))
=returnDate(VALUE("1/1/13"))
=returnDate(DATEVALUE("1/1/13"))
=returnDate("1/1/13")
=returnDate("1/1/2013")
Die letzten beiden "funktionieren", weil new Date()
das Datumsobjekt erfolgreich aus einer gültigen Zeichenfolge erstellt, aber beachten Sie, dass Sheets automatisch das aktuelle Jahrhundert erzwingt, während GAS ein zweistelliges Jahr um die 1900 erzwingt.
Also IMO, wenn Sie wollten, dass es sich genauso verhält wie in Excel (das heißt, einen numerischen Wert als Seriennummer für ein Datum ansehen), müssten Sie zuerst testen, ob der übergebene Parameter ein Datum ist Objekt (oder "gültige" Textzeichenfolge), und wenn nicht, wandeln Sie es mathematisch von "Tage vom 30/12/1899" in "Millisekunden vom 1/1/1970" und dann new Date()
um.
Entschuldigung für die langatmige Post. Diese
Werfen Sie einen Blick auf die Formeln in dieser Tabelle: https://docs.google.com/spreadsheet/ccc?key=0AqhqY231XZd3cFBiY2VqeWdmNWdaZ1BqVVZ2Q1pxWVE&hl=de#gid=0 – jfriend00
Nein gehen, fürchte ich - Sie können nicht verwenden Tabellenkalkulationsfunktionen in Apps-Skript, so dass Sie es von Grund auf neu schreiben müssen. – EML
Der letzte Beitrag in [this thread] (http://productforums.google.com/forum/#!category-topic/apps-script/services/47tY3PTkExo) schlägt vor, dass Sie das Tabellendatum erhalten können, verwenden Sie einige Tabellenkalkulation Javascript-Dienstprogramme um es in ein Textformat zu konvertieren, das der JavaScript-Datumskonstruktor verarbeiten kann, und diese Zeichenfolge dann dem JavaScript-Datumskonstruktor zuzuführen. Wenn Sie dieses Problem googeln, werden Sie vermutlich eine Antwort finden. – jfriend00