ドキュメントで作業しているときに、複数の列で何度も並べ替えたいスプレッドシートがあります。これはGUIを使用した複数のステップからなるプロセスであり、時間がかかりすぎるように思われました。ヘッダー行のチェックボックスをオンにし、最初の並べ替えパラメーターを設定してから、別のパラメーターを追加する必要があります。ふぅ!早く古くなります。
シートの並べ替えは問題ありませんでしたが、ヘッダー行も並べ替えられました。sort()関数のパラメーターとしてヘッダー行があることを指定する方法も、sort()によって自動的に通知されるヘッダー行をグローバルに定義する方法もありません。
その代わりに、ヘッダー行を保存し、最初の行を削除し、シートを並べ替え、一番上に新しい行を挿入し、ヘッダー行を再作成して、ヘッダー行をフォーマットしました。わお!書くのにそれほど時間はかからず、うまく機能しますが、非常に複雑です。
ユーザーの観点からは、ヘッダー行はポップアップする前に一時的に消えます。それほど悪くはありませんが、何かが起こっていることは明らかです。
それで、最後に私は私の質問に取り掛かります:私がソートしているときにヘッダー行の存在を認める能力を見落としていませんか?または、スクリプトにヘッダー行が存在するシートを並べ替えると、頼りになることなくヘッダー行も並べ替えられますか?
並べ替えプロセスにヘッダー行を含めないようにするために私のメソッドまたはそのようなメソッドが必要な場合、この機能の追加を検討できるようにGoogle Appsチームに通知できる場所はありますか?ヘッダー行の存在を指定することは、単純なチェックボックスを使用してGUIに存在するため、存在するか、スクリプト内で並べ替えるときに追加できることを願っています。
編集
私の元のコード(ドキュメント/コメントが削除されています):
sheet.deleteRow(1);
rows.sort([<1st col>, <2nd col>]);
sheet.insertRowsBefore(1, 1);
for (var j = 0; j <= (numCols - 1); j++) {
sheet.getRange(1, (j + 1)).setValue(firstRow[j]);
}
sheet.getRange(1, 1, 1, numCols).setFontWeight("bold");
sheet.getRange(1, 1, 2, numCols).setBorder(true, true, true, true, true, true);
上記のコードの代わりに私が試したことは、Thomasの提案に感謝します。
sheet.setFrozenRows(1);
sheet.sort(<2nd col>);
sheet.sort(<1st col>);
sheet.setFrozenRows(0);
残念ながら、これは行ではなく列で並べ替えるだけです。sheet.sort();
2つの呼び出しを最初のコードブロックの行に置き換えてrows.short();
も機能しません。これを試してみると、最初の行が並べ替え前にフリーズされていても、ヘッダー行が他のデータと一緒に並べ替えられるという最初の問題がコメントで報告されました。
また、この下に別のコード行が追加されない限り、スプレッドシートの上部に永続的な「Working...」通知が表示されます。ただし、何の影響も及ぼさないようです。
いずれの場合もvar sheet = SpreadsheetApp.getActiveSheet();
、、、var rows = sheet.getDataRange();
およびfirstRow
はヘッダー行データの配列です。