javascript - 如何将 SORT 和 Match google sheet 公式翻译成应用脚本/javascript?
问题描述
如何运行如下公式:
=sort(A2:F5000, match(B2:B5000,{"QTA 10 Days","QTA-REMAKE","QTA-SAMPLE","QTA NEW PROJECT","QTA NPI-CVF-Bryan","Qual-QTA-NPI Remake"},0),1)
使用 Google Apps Script API for Google Sheets 的一系列字段?
解决方案
要对工作表进行排序,您可以使用以下代码:
function myFunction() {
var inSheet = SpreadsheetApp.getActive().getSheets()[0];
var outSheet = SpreadsheetApp.getActive().getSheets()[1];
var values = inSheet.getRange('A2:C23').getValues();
values.sort(mySort);
outSheet.getRange('A2:C23').setValues(values);
}
function mySort(row1, row2) {
var values = ["QTA 10 Days","QTA-REMAKE","QTA-SAMPLE","QTA NEW PROJECT","QTA NPI-CVF-Bryan","Qual-QTA-NPI Remake"];
var val1 = values.indexOf(row1[2]);
var val2 = values.indexOf(row2[2]);
return val1 - val2;
}
您当然必须更改您正在使用的范围和/或工作表。我使用的 Sheets 文件就是这个文件,您可以在其中看到 Sheet1 中的原始值以及在 Sheet2 中运行我的脚本的输出。
基于起始模式子串的排序
要根据字符串是否以“QTA”开头进行排序,您可以将mySort
我上面提供的函数替换为以下内容:
function mySort(row1, row2) {
var val1 = row1[2];
var val2 = row2[2];
var qta1 = val1.indexOf("QTA") == 1;
var qta2 = val2.indexOf("QTA") == 1;
if (qta1 === qta2) return strcmp(val1, val2);
return qta1 ? 1 : -1;
}
function strcmp(a, b) {
if (a.toString() < b.toString()) return -1;
if (a.toString() > b.toString()) return 1;
return 0;
}
此函数将优先考虑包含“QTA”的行,并且它还将比较字符串的其余部分以防两者都包含或都不包含子字符串。有关结果,请参阅我的测试表的 Sheet3。
推荐阅读
- python - ZeroMQ:设置 LINGER=0 无法按预期工作
- java - Searchview 没有显示正确的结果
- python - 映射器映射类无法为映射表组装任何主键列
- python - 从 qt 创建者调用 python 脚本的愚蠢问题
- c++ - 作者所说的“让对象处于可分配状态”是什么意思?
- python-3.x - 矩阵阵列的克罗内克积
- php - 使用 Count 在轮播中加载图像
- ajax - 在 symfony 3.4 中根据 ajax 请求持久保存到数据库
- excel - 根据 2 个变量对美元金额进行求和和排序
- erlang - 即使指定了 -setcookie,为什么 Erlang escript 仍会创建 .erlang.cookie