gpt4 book ai didi

javascript - 在 Google 电子表格中移动值

转载 作者:行者123 更新时间:2023-11-30 17:59:23 25 4
gpt4 key购买 nike

我正在制作一个电子表格,用于为我所属的俱乐部预订设备。我正在寻找一种方法,让电子表格选定区域中的所有单元格在午夜向左移动一个,然后一直向左移动的单元格被删除。我知道我可以只使用触发器来执行此操作,但是我不确定如何编写函数来执行此操作。

如有任何帮助或建议,我们将不胜感激。

最佳答案

如果您有一个可以左移二维数组内容的函数,这会很简单。有了它,您可以执行以下操作。引用documentation了解方法详情。

  • 使用 Sheet.getRange() 定义您想要移动的范围。

  • 使用 Range.getValues() 获取包含您要移动的所有数据的数组。

  • 移动数组内容。

    var result = [];
    for (var r=0; r<array2d.length; r++) {
    var row = array2d[r].slice(0);
    var rotVal = row.shift();
    row.push(''); // preserve row width by adding a blank value
    result.push(row);
    }
  • 使用 Range.setValues() 将移位后的数组值写到之前的范围内。

注意:只有值会以这种方式保留,没有公式,没有格式。如果你想要格式化,你可以得到它的数组并以类似的方式操作它。由于相对引用的影响,公式更加棘手。

shiftArray 函数

上面的代码片段是这个函数的摘录,它可以将数组左移、右移、上移或下移,还支持“旋转”概念(从行或列的一端提取的值放在另一端,而不是空白)。为了确保源数组保持不变,它依赖于 deepCopy() 函数。

/**
* Shift the contents of a two-dimensional array in given direction,
* with rotate option. Can be used as a spreadsheet custom function.
* Dimensions of resulting array correspond to input array.
*
* Written for http://stackoverflow.com/questions/17404787 by Mogsdad
*
* @param {Array} array2d Two-dimensional array input
* @param {String} direction One of {'left', 'right', 'up', 'down'},
* defaults to 'left'.
* @param {Boolean} rotate Set true if shifted value should be
* rotated to other end, default false.
*
* @returns {Array} Two-dimensional array result
*/
function shiftArray( array2d, direction, rotate ) {
direction = direction || 'left';
rotate = rotate || false;
var result = [];

switch (direction) {
case 'left':
for (var r=0; r<array2d.length; r++) {
var row = array2d[r].slice(0);
var rotVal = row.shift();
row.push(rotate ? rotVal : '');
result.push(row);
}
break;

case 'right':
for (var r=0; r<array2d.length; r++) {
var row = array2d[r].slice(0);
var rotVal = row.pop();
row.unshift(rotate ? rotVal : '');
result.push(row);
}
break;

case 'up':
result = deepCopy(array2d);
var rotRow = result.shift();
if (!rotate)
// empty all elements in rotRow
for (var c=0; c<rotRow.length; c++)
rotRow[c]='';
result.push(rotRow);
break;

case 'down':
result = deepCopy(array2d);
var rotRow = result.pop();
if (!rotate)
// empty all elements in rotRow
for (var c=0; c<rotRow.length; c++)
rotRow[c]='';
result.unshift(rotRow);
break;

default:
throw new Error( "Unknown direction '"+direction+"'" );
}
return result;
}

/**
* Return a deep copy of the given object.
*
* From: http://james.padolsey.com/javascript/deep-copying-of-objects-and-arrays/#comment-10679
*/
function deepCopy(o) {
var copy = o,k;

if (o && typeof o === 'object') {
copy = Object.prototype.toString.call(o) === '[object Array]' ? [] : {};
for (k in o) {
copy[k] = deepCopy(o[k]);
}
}
return copy;
}

关于javascript - 在 Google 电子表格中移动值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17404787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com