google-apps-script - Google Sheets Script自定义范围排序而不粘贴结果
问题描述
我在 Google 表格中有一个范围,其中包含分散在各个行和列中的值和公式的组合。排序需要自定义,我编写了一个自定义排序函数来提取数据并对数组进行排序。但是,当将排序结果粘贴回来时,我会丢失公式。
有没有办法直接为没有设置/获取值的范围创建自定义排序?
function orderMyRange() {
var sh = SpreadsheetApp.getActiveSpreadsheet();
var mySheet = sh.getSheetByName("MySheet");
var myRng = mySheet.getRange("A4:L500");
var myData = myRng.getValues();
myData.sort(orderCustom);
myRng.setValues(myData);
}
解决方案
我建议你这样尝试:
- 得到公式
var formulas = myRng.getFormulas()
- 找到如何排序
formulas
和myData
相同的方式。以某种方式,如果myData[12]
移动到9
(第 10 行),那么formulas
将在var temp = formulas[9]; formulas[9] = formulas[12]
. 按值排序,但应用相同的排序formulas
- 输入
myData
所有公式,例如if(formulas[row][column]) myData[row][column] = formulas[row][column]
myRng.setValues(myData)
如果它是在谷歌表中用作公式的自定义函数,则使用或返回数组。
对于选择排序算法,这将执行以下操作:
var myData = [[1], [223], [3], [2], [345]];
var formulas = [["=ROW(A1)"], ["=ROW(A223)"], ["=ROW(A3)"], ["=ROW(A2)"], ["=ROW(A345)"]];
function Selection_Sort(arr, parr, compare_Function) {
//arr is the value array and parr is the formula array
function compare(a, b) {
return a - b;
}
var min = 0;
var minFormula
var index = 0;
var temp = 0;
var tempFormula = "";
//{Function} compare_Function Compare function
compare_Function = compare_Function || compare;
for (var i = 0; i < arr.length; i += 1) {
index = i;
min = arr[i][0];
minFormula = parr[i][0];
for (var j = i + 1; j < arr.length; j += 1) {
if (compare_Function(min, arr[j]) > 0) {
min = arr[j][0];
minFormula = parr[j][0];
index = j;
}
}
temp = arr[i][0];
tempFormula = parr[i][0];
arr[i][0] = min;
parr[i][0] = minFormula;
arr[index][0] = temp;
parr[index][0] = tempFormula;
}
//return sorted arr
return [arr, parr];
}
console.log(Selection_Sort(myData, formulas, function(a, b) { return a - b; }));
推荐阅读
- css - 如何在 CSS 上将我的网站上的帖子标题居中?
- google-cloud-platform - 我在GCP的AI平台上提交训练操作失败
- jquery - 如何找到带双引号的引号?
- c# - 有没有更好的方法来确定两个实体之间的平移距离小于 x 量,然后分配一个 int 值?
- python - 计算多维数组中索引处的元素
- excel - 使用宏将分隔文件导入 Excel;运行时错误“1004”
- c# - 从 Internet Explorer 网页检索 ID/类
- python-3.x - 使用 linerrud 数据集的感知器学习
- r - 在 R 中以交互方式运行多个 Windows 系统命令
- python - 在 Python 中将标准日期格式转换为按点拆分的字符串