Chtěl bych definovat vlastní funkci v Tabulce Google. Tato funkce by měla dělat něco velmi jednoduchého, přesto se mi nepodařilo zjistit, jak to udělat. Jsem velmi zmatený všemi odpověďmi, které jsem četl, protože nemohu najít jasný odkaz na práci s daty ve skriptech google.
Z toho, co chápu, lze základní manipulace s daty provádět pomocí:
-
new Date()
: podle toho, co chápu, definuje objekt, který má některé vlastnosti. Nevím, jak použít datum buňky a převést ji jako takový objekt. -
Utilities.formatDate()
: toto slouží ke změně formátu data považovaného za řetězec . - knihovna
Moment
( http://momentjs.com/ )
Nakonec můžu zadat dvě data (např. 31/01/2016
) a najít mezi nimi maximum a extrahovat měsíc prvního jeden?
function myfun(date1,date2) { // month = month of date 1 // return maximum(date1,date2); }
Také mě zajímá, jestli někdo může vysvětlit obrysy jednání s daty nebo uvést dobrý odkaz.
Komentáře
- Viz odpověď od Sergei insas to Jak číst správné časové hodnoty z tabulky Google
- Děkujeme. Neexistuje jiný způsob? Vypadá to ' s neuvěřitelně komplikovaně, například na získání měsíce data! Navíc musí brát v úvahu časové pásmo … To ' sa trochu zkroutilo pro jednoduché (pevné) operace s datem.
- Přidal jsem odpověď zaměřenou na kód případu, který byl odhalen, ale otázka je dvě široké (manipulace s datem). Možná byste měli začít hledat fragmenty kódu JavaScript a online kurzy.
- @Rub é n Rozumím. Nechtěl jsem klást " napsat kód pro mě " otázku, takže jsem hledal obecné informace, které jsem ve skutečnosti nenašel. Post příspěvku Sergeje insas ', který jste uvedli, je užitečný.
- Obecné informace o JavaScriptu najdete v developer.mozilla. org / en-US / docs / Web / JavaScript a ohledně skriptu Google Apps viz developers.google.com/apps-script .
Odpověď
Získání a nastavení hodnot datového času
Kdykoli váš skript volá .getValue()
v buňce formátované jako datum, datum nebo čas nebo trvání získá objekt JavaScript Date . Poté můžete na tento objekt použít různé metody uvedené na této stránce MDN, včetně getMonth()
pro daný měsíc. Příklad:
var sheet = SpreadsheetApp.getActiveSheet(); var value = sheet.getRange("A1").getValue(); // is a Date object Logger.log([value.getMonth(), value.getHours(), value.getUTCHours()]); // examples of available methods
Naopak můžete objektu Date přiřadit buňku pomocí setValue
a bude automaticky formátován jako takový.
sheet.getRange("B2").setValue(new Date()); // current timestamp
Časová pásma
Časové razítko v Tabulkách Google je v místním časovém pásmu, které se nastavuje pomocí Soubor> Nastavení tabulky. Skript funguje také v časovém pásmu, které se může lišit a nachází se v nabídce Soubor> Vlastnosti projektu v editoru skriptu. Pokud tato časová pásma nesouhlasí, budete mít problém s časovými značkami.
Chcete-li zkontrolovat, zda se časová pásma shodují, můžete je porovnat buď ručně, nebo provést něco podobného:
var sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange("A1").setFormula("=date(2015,1,1)"); Logger.log(sheet.getRange("A1").getValue().getHours());
Tím se zadá vzorec =date(2015,1,1)
v buňce A1. Výsledkem bude 2015-01-01 00:00:00 v časovém pásmu tabulky. Skript poté získá datum a extrahuje hodiny v místním čase skriptu. Pokud časová pásma souhlasí, měli byste vidět 0,0 v log.
Komentáře
- děkuji, pracujte pro mě, další otázka: Chci zkontrolovat spoustu buněk, jako je range (2, 1, 30, 20) .getValues; – jak toho dosáhnout?
Odpověď
Krátká odpověď
Níže jsou uvedeny dvě vlastní funkce jako příklady toho, jak by Tabulky Google a Google Apps Script mohly pracovat s daty.
Příklad 1: Získejte nejnovější datum
function myFunction(date1,date2) { return new Date(Math.max(date1,date2)) }
Příklad 2: Získejte měsíc nejnovějšího data
function myFunction2(date1,date2) { var date = new Date(Math.max(date1,date2)); return date.getMonth(); }
Stručné vysvětlení
V prvním příkladu Math.max Metoda JavaScriptu funguje.
Pokud chcete získat datum jako resu Je vytvořen datový objekt pomocí nového Date () .
Ve druhém příkladu je datový objekt přiřazen k proměnné , k získání měsíčního indexu se potom použije avaScript] getMonth () JavaScript.Pamatujte, že JavaScript používá 0
jako výchozí prvek, takže 0
je na leden, 1
na únor atd.
Reference
- Vlastní funkce v Tabulkách Google – Průvodci skripty Google Apps
- Porovnat dvě data pomocí JavaScriptu – StackOverflow
Komentáře
- i) Jsou
date1
,date2
předávány jako čísla (obvykle: 54243)? ii) Nyní jsem se pokusil extrahovat měsícdate2
pomocídate2.getMonth()
, ale když je buňka01/12/2015
vrací 10 a 11 pro02/12/2015
. Myslím, že ' s kvůli časovému pásmu. Funkce listumonth()
je mnohem jednodušší. - Tabulky Google zpracovávají data jako pořadová čísla stejná jako JavaScript, ale každá má jiné datum zahájení. Pokud tedy chcete používat funkce data JavaScript, měli byste nejprve převést datum tabulky na datum JavaScript. Jak jste si již všimli, jednodušší cestou je použití funkcí tabulek ke zpracování dat tabulky a funkcí JavaScriptu ke zpracování dat JavaScriptu.