Ich habe ein Google Sheets, das die Einträge aus einem Google Form registriert. Ich habe ein Skript eingerichtet, um das Blatt bei jedem Öffnen automatisch zu sortieren, und einen Auslöser, um das Skript beim Öffnen auszuführen, aber es findet keine Sortierung statt. Ich habe nur begrenzte Kenntnisse in Skripten und Javascript. Was ist los mit dem folgenden Skript?
function OrderByEvent() {
// The numeric index of the column you wish to keep auto-sorted. A = 1, B = 2,
// and so on.
var SORT_COLUMN_INDEX = 10;
// Whether to sort the data in ascending or descending order. false=ascending and true=descending
var ASCENDING = true;
// If you have header rows in your sheet, specify how many to exclude them from
// the sort.
var NUMBER_OF_HEADER_ROWS = 1;
// No need to edit anything below this line for general use.
// Make an improvement? Ping me on GitHub and let me know!
// Keep track of the active sheet.
var activeSheet;
/**
* Automatically sorts on the pre-defined column.
*
* @param {Sheet} sheet The sheet to sort.
*/
function autoSort(sheet) {
// Get the entire set of data for this sheet.
var range = sheet.getDataRange();
// Then, if there are any header rows, offset our range to remove them from
// it; otherwise, they will end up being sorted as well.
if (NUMBER_OF_HEADER_ROWS > 0) {
// Setting the second parameter of offset() to 0 to prevents it from
// shifting any columns. Note that row headers wouldn't make much
// sense here, but this is where you would modify it if you
// wanted support for those as well.
range = range.offset(NUMBER_OF_HEADER_ROWS, 0);
}
// Perform the actual sort.
range.sort( {
column: SORT_COLUMN_INDEX,
ascending: ASCENDING
} );
}
function onOpen(event) {
activeSheet = SpreadsheetApp.getActiveSheet();
{autoSort(activeSheet);
}
}
/**
* Triggers when a sheet is edited, and calls the auto sort function if the
* edited cell is in the column we're looking to sort.
*
* @param {Object} event The triggering event.
*/
//function onEdit(event) {
// var editedCell;
// Update the active sheet in case it changed.
// activeSheet = SpreadsheetApp.getActiveSheet();
// Get the cell that was just modified.
// editedCell = activeSheet.getActiveCell();
// Only trigger a re-sort if the user edited data in the column they're
// sorting by; otherwise, we perform unnecessary additional sorts if
// the targeted sort column's data didn't change.
// if (editedCell.getColumn() == SORT_COLUMN_INDEX) {
// autoSort(activeSheet);
// }
//}
}
Wie wäre es mit dieser Antwort?
onOpen()
als einfacher Auslöser verwendet wird, wird eine Funktion von eingefügt OrderByEvent()
. Auf diese Weise wird beim Öffnen der Tabelle onOpen()
nicht ausgeführt. Selbst wenn OrderByEvent()
es als installierbarer Trigger installiert OrderByEvent()
ist, onOpen()
wird es nicht ausgeführt , wenn es ausgeführt wird.
SpreadsheetApp.getActiveSheet()
kann modifiziert werden , event.source
in Ihrem Skript. Natürlich event.source.getActiveSheet()
kann verwendet werden.Wenn die oben genannten Punkte in Ihrem Skript wiedergegeben werden, sieht es wie folgt aus. Bitte stellen Sie sich dies als eine von mehreren Antworten vor.
function autoSort(sheet) {
var SORT_COLUMN_INDEX = 10;
var ASCENDING = true;
var NUMBER_OF_HEADER_ROWS = 1;
var range = sheet.getDataRange();
if (NUMBER_OF_HEADER_ROWS > 0) {
range = range.offset(NUMBER_OF_HEADER_ROWS, 0);
}
range.sort( {
column: SORT_COLUMN_INDEX,
ascending: ASCENDING
} );
}
function onOpen(event) {
autoSort(event.source);
}
onOpen()
wird automatisch ausgeführt und funktioniert, wenn die Tabelle geöffnet wird.Wenn ich Ihre Frage falsch verstanden habe und dies nicht das gewünschte Ergebnis war, entschuldige ich mich.
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen