2016-06-26 7 views
4

Kann das Zahlenformat 'Automatisch' programmgesteuert über GAS angewendet werden? Mein Problem ist, dass, während ich Zahlenspalten schreibe, Sheets versucht, eine angemessene Formatierung anzuwenden, aber manchmal falsch liegt. Das heißt, bestimmte kleine ganze Zahlen (manchmal 1) werden als Daten formatiert. Der Bereich wird in einer myRange.setValues() Methode geschrieben und ich kann kein Muster zu den Fehlern sehen und sehe deshalb keine Möglichkeit, die überraschende Fehlformatierung zu verhindern.Anwendung "Automatische" Zahlenformatierung

Aber wenn ich den Bereich in den Blättern auswähle und einfach auf "Automatisch" im Zahlenformat-Menü klicke, kehrt alles zum Normalzustand zurück. Es hilft nicht, das im Voraus zu klicken, da das Schreiben von Daten das Format irgendwie zurücksetzt.

Trotz der langatmigen Intro, ist meine Frage sehr einfach: wie programmgesteuert "Automatische" Zahlenformatierung anwenden. Ich denke, das ist sehr einfach, zumal Google und Suchanfragen hier keine Hilfe waren.

Meine aktuelle Fallback-Lösung ist als Format für die gesamte Palette zu verwenden. Dies ist nicht ideal, da einige Zahlen sehr groß sind und in wissenschaftlicher Notation leichter zu lesen sind. Es gibt auch einige Textzeichenfolgen im Bereich, diese werden jedoch unabhängig vom verwendeten Format richtig formatiert. Ich würde auch lieber vermeiden, dass ich die Daten durchlaufen und auf Werte prüfen muss, um das beste Format zu bestimmen, wenn es nur ein paar Klicks in der Benutzeroberfläche gibt.

'Automatic' Number format.

+0

Dies ist eine wirklich gute Frage, und etwas, das definitiv nicht dokumentiert ist. Am nächsten konnte ich http://stackoverflow.com/questions/13758913/format-a-google-sheets-cell-in-plaintext-via-apps-script finden, das nur wirklich über Klartext geht. –

+0

Wirklich zu schätzen den Kommentar. Ich habe fast eine Woche lang gesucht und gesucht und dabei gedacht, dass ich etwas Offensichtliches vermissen muss. Der einzige Verdacht, den ich noch habe, ist, dass "automatische" Formatierung die ** Abwesenheit ** irgendeiner Zahlenformatierung ist, aber meine Bemühungen, "null" oder "undefiniert" zuzuweisen, waren völlig erfolglos. 'myRange.setNumberFormat ((typeof undefined)); // oder einfach "undefiniert" verwandelt eine Zelle mit einer "0" in: 'un301899fin189930' - das heißt, sie analysiert 'undefiniert' als String und versucht dann _valiently_, die Zelle als Datum zu formatieren. (?) Die Übergabe von 'null' löst einen Serverfehler aus. –

+0

Und wenn jemand anderes sich wundern 'myRange.setNumberFormat (" ");' nicht funktioniert. Es versteckt einfach alle Zahlen (und Daten). Saiten zeigen sich immer noch normal. Genau wie wenn Sie "" in das Feld für das benutzerdefinierte Zahlenformat in der Benutzeroberfläche platziert haben. –

Antwort

0

Wenn Sie im Bereich nicht über Termine, erscheint die unten Lösung die beste verfügbare Option zu sein (ohne an eine API-basierten Lösung zurückgreifen):

myRange.setNumberFormat('0.###############'); 

A Null -point-15x '#' scheint ein 'magisches' Zahlenformat zu sein, das es erlaubt, sehr große Zahlen als wissenschaftliche Notation anzuzeigen und kleinere ganze Zahlen und Dezimalzahlen im 'Standard'-Format anzuzeigen, bevor die Zahlenformatierung angewendet wird. Dies ist auch das Format, das für Zellen zurückgegeben wird, die Nichtdaten enthalten, die mit der Auswahl "Automatisch" in der Benutzeroberfläche formatiert wurden.

Hinzufügen oder Entfernen sogar eine# wird "den Zauber brechen" und bewirken, dass sehr große Zahlen in nicht-wissenschaftlicher Notation angezeigt werden. Getestet habe ich auch Änderungen vor der Dezimalstelle, aber Verlassen des 15x #:

auch funktional: myRange.setNumberFormat('#,##0.###############');

gibt also eine gewisse Flexibilität für Präfixe.

Nicht-funktionale: myRange.setNumberFormat('#.###############');

Die 0 ist offenbar erforderlich.

Und schließlich

Nicht-funktionale: savegameRange.setNumberFormat('0.##############[red]');

Dies schaltet Zahlen rot, aber bricht die 'magische' Formatierung. Also keine Suffixe erscheint es.


Auch wenn Sie Termine im Bereich haben, wird dies nicht funktionieren, wie sie wollen, nicht überraschend, Display als die zugrunde liegende Zahl. Und potentiell problematischer (aber völlig verständlich), die einzige Möglichkeit, sie in das Datumsformular zurückzugeben, ist das manuelle Anwenden eines Datumsformats, vorausgesetzt, Sie wissen, welche Zellen 'Daten' waren.

Die vollständige Replikation der Formatierung der 'automatischen' Zahlen erfordert das Durchlaufen des Bereichs, um Daten zu finden und das gewünschte Datumsformat anzuwenden, ansonsten aber das 'magische' Format anzuwenden. (My Original-Datensatz war eine Mischung aus Zahlen und Strings, so dass der einfache Ansatz oben genannten Arbeiten gegeben.)

+0

Es ist gut zu bemerken, dass dies es nicht automatisch für Leser auf der Suche nach einem Tl; Dr. Ich habe das entdeckt, bevor ich meinen früheren Kommentar gemacht habe. Hoffe, jemand kann es herausfinden oder beweisen, dass es unmöglich ist. –

+0

Danke. Es ist schwer, sich beim Schreiben in die Schuhe anderer zu versetzen. Aktualisiert, um die Einschränkungen des Ansatzes zu verdeutlichen. Der Link, den Sie in Ihrem früheren Kommentar zitiert haben, war ebenfalls interessant und führte mich dazu, mehr Java-Dokumentation zur Zahlenformatierung zu recherchieren. Es gibt vielleicht mehr Antworten für bestimmte Situationen, aber ich habe keine Möglichkeit gesehen, eine automatische Formatierung in Java auszulösen, in der Hoffnung, dass die Methode auch hier funktionieren würde. –

1

I copyFormatToRange verwenden kopieren/anwenden Automatische Format:

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getActiveSheet(); 
var source_cell = sheet.getRange("A1");//A1: cell having automatic format 
source_cell.copyFormatToRange(sheet,1,1,2,2);//copy format of cell A1 to cell A2 

Sie eine API schreiben können, öffnet sich eine andere Tabelle, lesen Sie eine beliebige Zelle mit dem automatischen Format.

var ss = SpreadsheetApp.openById(SpreadsheetId);//Id of another spreadsheet 

Dann verwenden Sie copyFormatToRange zu Ihrer gewünschten Zelle.

Verwandte Themen