16

Korzystając z Google Apps Script, chcę ustawić format komórki Arkuszy Google na zwykły tekst.Formatowanie komórki Arkuszy Google w postaci zwykłego tekstu za pomocą Apps Script

Powodem, dla którego chcę to zrobić, jest wyświetlanie daty w formacie daty w USA (MM/DD/RRRR). [Możemy założyć, że ustawienia regionalne na koncie Google w OP są ustawione na używanie DD/MM/RRRR, bardziej powszechnego formatu daty. . -ed]

utworzyć ciąg tak:

var thisDate = Utilities.formatDate (new Date(), SpreadsheetApp.getActiveSpreadsheet(). getSpreadsheetTimeZone(), "MM/d/yyyy"); 

... która zwraca datę w formacie amerykańskim, 06/13/2012, czyli to, co chcę. Jednak, kiedy ustawić wartość komórki do tego łańcucha:

sheet.getRange (1, n). setValue (thisDate); 

... data jest sformatowana w komórce według mojego lokum, 13/06/2012, a nie w formacie amerykańskim.

Poniższa operacja nie powiedzie się również, ponieważ data jest zwrócony w standardowym formacie, nie format US:

sheet.getRange (1, n). getValue() == "06/13/2012" 

Kiedy komórka jest sformatowana jako tekst, a nie datę, wszystko działa bez zarzutu.

Moje pytanie brzmi: jak sformatować komórkę za pomocą JavaScript.

Odpowiedz

0

Niestety tekst planu nie pasował. Zrób dokument, gdy tylko komórka dotrze do daty, po prostu sformatuj komórkę. znalazł sposób, aby nie datę utworzenia)

var thisDate1 = Utilities.formatDate (new Date(), SpreadsheetApp.getActiveSpreadsheet(). getSpreadsheetTimeZone(), "MM//d//yyyy"); 

Sorry tak późną odpowiedź. Wszystkie ręce nie sięgnęły.

23

Druga odpowiedź, aby ustawić format na "zwykły tekst" w javascript, nie działa. Jednakże:

sheet.getRange(1,n).setNumberFormat('@[email protected]'); 

Tak więc magiczną wartością programowego formatowania tekstu jest "@ STRING @"!

+1

FM. Czy Google dokumentuje te rzeczy w dowolnym miejscu? – bmacnaughton

+1

Znalazłem, że tylko "@" działa również. Ten link pomaga - http://www.blackcj.com/blog/2015/05/18/cell-number-formatting-with-google-apps-script/ – bmacnaughton

3

Uzupełnieniem Christian dobrej odpowiedzi: Zauważyłem, że jeśli komórka docelowa została już ustawiona na format (ręcznie) Tekst, wyznaczając wartość z range.setValue() , które nie mogą być zinterpretowane jako tekst (jak data, lub liczba), zmieni automatycznie format liczb. więc dobrym rozwiązaniem, jeśli chcesz na pewno zachować format tekstu jest

range.setValue ("01293849847") numberFormat ("@").;

i nie

range.numberFormat ("@").setValue ("01293849847");

1

Innym sposobem wymuszenia wartości mają być zapisane jako zwykły tekst:

Prepend znak cytat: '. Nie ma to wpływu na wyświetlaną wartość, a także przez odczytanie wartości, o którą znak zapytania nie został uwzględniony.

let dateStr = '07-07-20017'; 
sheet.getRange(x, y).setValue("'" + dateStr); 

let backStr = sheet.getRange(x, y).getValue(); 
assert(dateStr === backStr); 
+0

To jest łatwe, dziękuję :) Czy wiemy czy to jest udokumentowane w dowolnym miejscu? – mlvljr

0

Zrobiłem to jak poniżej i działa tak, jak się spodziewałem. Kolumna My B pokazuje prawidłową liczbę 3-cyfrową wypełnioną zerami (np. 004), a moja kolumna C pokazuje prawidłową liczbę 10-cyfrową wypełnioną zero (np. 0060000001) jako tekstów. Pobrałem plik przekonwertowany do Excela jako tekst z wyściełanymi zerami. Myślę, że to poradziłoby z datą również jako tekstem.

winSS.getRange ("US! B2: B"). SetNumberFormat ("000") setNumberFormat ("@"); winSS.getRange ("US! C2: C"). SetNumberFormat ("0000000000"). SetNumberFormat ("@");