Erstellen Sie eine Gruppierung in Google Sheets
Ich möchte Gruppen in Google Sheets über API (Appscript) implementieren, da die direkte Methode nicht dynamisch funktioniert. Ich habe eine Spalte mit dem Namen Ebenen (0-8) und dann zwei weitere Spalten (andere Informationen). Ich möchte ein Skript schreiben, um die Gruppen zu erstellen. Es wird die erste Spalte überprüft, die Ebenen hat, und wenn die nächste Zeile eine Ebene hat, die höher als die aktuelle i-Ebene ist, wird eine Gruppe dieser Zeilen erstellt, bis eine Zeile kommt, die dieselbe Ebene oder weniger als die i-Ebene hat. Zum Beispiel sind die Ebenen: 1,2,3,4,1,0,3,4. In diesem Fall wird von 1 ausgegangen und die Gruppe von 2,3,4 gebildet, da sie größer als 1 sind. Überspringen Sie 1,0, da sie gleich oder kleiner als diese sind, und bilden Sie dann eine Gruppe von 3,4. Es läuft dann für 2 und macht dasselbe, macht eine Gruppe für 3,4 und überspringt 1,0 und macht dann eine Gruppe für 3,4.
Hier ist der Link: https://docs.google.com/spreadsheets/d/1Ejbkl2imgEFi2mVwQ81xF5OkC97IXc4UcQIC3dxwPh4/edit?usp=sharing
Hier ist der Code:
function myFunction() {
const rootSheet = SpreadsheetApp.getActive().getActiveSheet();
var r = rootSheet.getLastRow();
for (var i = 3; i <= r; i++) {
var t = 0;
do {
rootSheet.getRange(i,6).shiftRowGroupDepth(1);
t = t + 1;
} while (SpreadsheetApp.getActiveSheet().getRange(i,1).getValue() == t)
}
}
So manuell habe ich eine Gruppierung gemäß den Bildern erreicht: https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing https://drive.google.com/file/d/1JthF2ZJXgj5--0IOnW1LCM5Pneo9XUxJ/view?usp=sharing
Antworten
Änderungspunkte:
- In Ihrem Skript werden die Werte aus der Spalte "A" in "Sheet1" anscheinend nicht für die Gruppentiefe verwendet.
- In diesem Fall möchte ich den folgenden Ablauf vorschlagen.
- Werte aus der Spalte "A" abrufen.
- Stellen Sie die Gruppentiefe anhand der abgerufenen Werte ein.
Geändertes Skript:
function myFunction() {
const sheetName = "Sheet1";
// 1. Retrieve values from the column "A".
const rootSheet = SpreadsheetApp.getActive().getSheetByName(sheetName);
const levels = rootSheet.getRange("A2:A" + rootSheet.getLastRow()).getValues();
// 2. Set the group depth using the retrieved values.
levels.forEach(([a], i) => rootSheet.getRange(i + 2, 1).shiftRowGroupDepth(a));
}
Ergebnis:
Wenn das obige Skript für Ihre freigegebene Tabelle verwendet wird, wird das folgende Ergebnis erzielt.
Referenz:
- shiftRowGroupDepth (Delta)