Benutzerdefinierte Google Spreadsheets-Verknüpfungen: Verschieben Sie ausgewählte Zeilen nach oben / unten / oben / Ende

8

Wie der Titel schon sagt, verschiebe ich Zeilen sehr oft und das Fehlen einer Standardverknüpfung erschwert die Sache für mich ...

Die Drag-Option ist nicht praktisch, wenn ich einige Zeilen an den unteren Rand eines großen Blattes verschieben muss!

Ich habe versucht, uns AutoHotKey, aber es ist ein Schmerz, da es eine Reihe nach der anderen bewegt und es ewig dauert, bis der Boden erreicht ist.

Also suche ich vielleicht nach einer JavaScript-Lösung, vielleicht, wenn mich jemand mit einem Basis-Beispielcode / Referenzen auf den richtigen Weg bringen könnte, den ich später bearbeiten / erweitern könnte, um meinen Anforderungen zu entsprechen ...

Auch jede alternative Lösung, an die ich nicht denke, ist willkommen.

Bearbeiten: Aus dem Titel:

  • Nach oben: Zeile (n) um eine Zeile nach oben verschieben
  • Nach unten: Zeile (n) um eine Zeile nach unten verschieben
  • Oben: Verschieben Sie die Reihe (n) an die Oberseite des Blattes (ganz nach oben).
  • Ende: Verschieben Sie die Reihe (n) an den unteren Rand des Blattes (ganz nach unten, am Ende nicht leerer Reihen).
Enissay
quelle
Sollen die Zeilen nacheinander verschoben werden oder nicht? Der Titel erwähnt auch "up / down / top / end", aber in dem Beitrag schreiben Sie nur über das Verschieben nach unten. Ich kann erraten, worauf sich "top" bezieht, weiß aber nichts über up / down,
@Norma: Ich habe einige Erklärungen hinzugefügt. Nehmen wir zur Vereinfachung an, es handelt sich bei den Zeilen um aufeinanderfolgende Zeilen (auch wenn sie nicht vorhanden sind, wird es nicht kompliziert sein, sie vor dem Verschieben zu gruppieren)
Enissay,

Antworten:

5

Das folgende Skript verschiebt ausgewählte aufeinanderfolgende Zeilen auf eine von vier in der Frage beschriebenen Arten. Es wird durch benutzerdefinierte Menüelemente (Benutzerdefiniert> Zeilen verschieben ...) ausgelöst, die bei onOpenjedem Öffnen der Tabelle per Funktion erstellt werden . Leider gibt es keine Möglichkeit, Skriptfunktionen Tastaturkürzel zuzuweisen.

Die Struktur der Funktionen ist einfach: Zeilen einfügen, Bereich (einschließlich Formeln und Formatierung) kopieren, alte Kopie des Bereichs löschen. Die Hilfsfunktion macht getDataes unnötig, die gleiche Datenerfassung in jeder der vier Funktionen zu wiederholen.

function onOpen() {
  var menu = [{name: "Move rows up", functionName: "moveUp"}, {name: "Move rows down", functionName: "moveDown"}, {name: "Move rows to top", functionName: "moveTop"}, {name: "Move rows to bottom", functionName: "moveBottom"}];
  SpreadsheetApp.getActiveSpreadsheet().addMenu("Custom", menu);
}

function moveDown(){
  var d = getData(); 
  d.sheet.insertRowsAfter(d.row+d.height, d.height);
  d.selection.copyTo(d.sheet.getRange(d.row+d.height+1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row, d.height);
}

function moveBottom(){
  var d = getData(); 
  d.sheet.insertRowsAfter(d.last, d.height);
  d.selection.copyTo(d.sheet.getRange(d.last+1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row, d.height);
}

function moveUp(){
  var d = getData();
  d.sheet.insertRowsBefore(d.row-1, d.height);
  d.sheet.getRange(d.row+d.height, 1, d.height, d.width).copyTo(d.sheet.getRange(d.row-1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row+d.height, d.height);
}

function moveTop(){
  var d = getData(); 
  d.sheet.insertRowsBefore(1, d.height);
  d.sheet.getRange(d.row+d.height, 1, d.height, d.width).copyTo(d.sheet.getRange(1, 1, d.height, d.width));
  d.sheet.deleteRows(d.row+d.height, d.height);
}              

function getData() {              
  var d = {};
  d.sheet = SpreadsheetApp.getActiveSheet();
  d.selection = d.sheet.getActiveRange();
  d.row = d.selection.getRowIndex();
  d.height = d.selection.getHeight();
  d.width = d.selection.getWidth();
  d.last = d.sheet.getLastRow();
  return d;
}

quelle
Ihr magischer Code wirkt wie ein Zauber; Ich habe mich jedoch gefragt, ob es eine Möglichkeit gibt, Folgendes zu erreichen: Verschobene 1.Zeilen sollten nach dem Verschieben immer noch den Fokus haben (ausgewählt werden), dies ist jetzt nicht der Fall. 2.Wenn Zeilen verschoben werden, wäre es schön, wenn das Fenster nach unten / oben scrollen würde, um ihnen zu folgen. Die Hauptfrage wurde beantwortet, aber es wäre schön, wenn Sie es perfekt machen, indem Sie diese hinzufügen (ziemlich sicher, dass viele Leute es auch nützlich finden werden)
Enissay
Als akzeptiert markiert, können Sie diese zusätzlichen Punkte später hinzufügen, wenn Sie Lust dazu haben :-)
Enissay