Google 张 "Transpose(sort(transpose" - 作为脚本
Google Sheets "Transpose(sort(transpose" -as Script
是否有 Google 表格脚本可以转置我的数据,然后对其进行排序,然后转置回来。我需要在下面执行此公式 - 但作为脚本。
=转置(排序(转置(J1:N4),1,))
我的意图是能够对我的 header 列进行 A->Z 排序,这样我每次放入时都可以将 header 列的位置保持一致。例如,有时数据来自 A:G 列,但下一次,曾经是 A:G 的 header 现在是 AGBFCDE(加扰)。对整个列进行向下排序非常困难,但我需要对 A1:G1 进行排序,同时保持其下方的数据仍与正确的列 header 相关联。例如,它将“向左或向右移动整列”,直到第 header 列按 A->Z 排序。我希望这种 transposing-sorting-transposing 返回的方法可以解决问题,但欢迎其他建议。
column 1 column4 column5 column 2 column 3
data 1 data 4 data 5 data 2 data 3
data 1 data 4 data 5 data 2 data 3
data 1 data 4 data 5 data 2 data 3
正如您在上面看到的,header 列没有按顺序排列。每次我将它们放入时,它们都不会,但我想知道是否有更好的脚本或某种方法可以按顺序对 Column 1:Column 5 进行排序,即使它们永远不会那样粘贴。如果除了 transposing/sorting 之外还有更好的方法,那么我愿意接受任何方法。
这里我创建了一个具有相同概念的脚本 Transpose -> Sort -> Transpose。
function myFunction() {
// get all the data in the sheet
var ss = SpreadsheetApp.getActiveSheet();
var range = ss.getDataRange();
var values = range.getValues();
//convert rows into columns
var data = transpose(values);
//sort data
data.sort(
function(a,b) {
return b[0]-a[0] || a[0].localeCompare(b[0]);
});
//convert columns into rows
var data1 = transpose(data);
//write data back to spreadsheet
ss.getRange(1,1,values.length,values[0].length)
.setValues(data1);
}
function transpose(matrix) {
return matrix[0].map((col, i) => matrix.map(row => row[i]));
}
例子
之前
之后
参考资料
Transposing a 2D-array in JavaScript
是否有 Google 表格脚本可以转置我的数据,然后对其进行排序,然后转置回来。我需要在下面执行此公式 - 但作为脚本。
=转置(排序(转置(J1:N4),1,))
我的意图是能够对我的 header 列进行 A->Z 排序,这样我每次放入时都可以将 header 列的位置保持一致。例如,有时数据来自 A:G 列,但下一次,曾经是 A:G 的 header 现在是 AGBFCDE(加扰)。对整个列进行向下排序非常困难,但我需要对 A1:G1 进行排序,同时保持其下方的数据仍与正确的列 header 相关联。例如,它将“向左或向右移动整列”,直到第 header 列按 A->Z 排序。我希望这种 transposing-sorting-transposing 返回的方法可以解决问题,但欢迎其他建议。
column 1 column4 column5 column 2 column 3
data 1 data 4 data 5 data 2 data 3
data 1 data 4 data 5 data 2 data 3
data 1 data 4 data 5 data 2 data 3
正如您在上面看到的,header 列没有按顺序排列。每次我将它们放入时,它们都不会,但我想知道是否有更好的脚本或某种方法可以按顺序对 Column 1:Column 5 进行排序,即使它们永远不会那样粘贴。如果除了 transposing/sorting 之外还有更好的方法,那么我愿意接受任何方法。
这里我创建了一个具有相同概念的脚本 Transpose -> Sort -> Transpose。
function myFunction() {
// get all the data in the sheet
var ss = SpreadsheetApp.getActiveSheet();
var range = ss.getDataRange();
var values = range.getValues();
//convert rows into columns
var data = transpose(values);
//sort data
data.sort(
function(a,b) {
return b[0]-a[0] || a[0].localeCompare(b[0]);
});
//convert columns into rows
var data1 = transpose(data);
//write data back to spreadsheet
ss.getRange(1,1,values.length,values[0].length)
.setValues(data1);
}
function transpose(matrix) {
return matrix[0].map((col, i) => matrix.map(row => row[i]));
}
例子
之前
之后
参考资料
Transposing a 2D-array in JavaScript