有人可以帮我解决这个问题吗?
附上我正在尝试做的示例工作表:
https://docs.google.com/spreadsheets/d/12w4rGArGi1I1wlpm5yJJtT5AAlMM4LcZC31_DpP6jZQ/edit?usp=sharing
我正在尝试在数据选择中移动包含“ PO”的行。 (请参见移位功能)
应从此更改:
对此:
我写了一个脚本,但是它不起作用,并且没有收到错误消息。
我有一种感觉是因为我试图“ +1”我的数组以抵消我的价值观。请帮忙!
这是我当前的脚本:
function shift() {
try{
var ss = SpreadsheetApp.getActiveSpreadsheet();
var as = ss.getActiveSheet();
var ar = as.getActiveRange();
var vals = ar.getValues(); // get values from the active (selected) range...... intended use is to draw a selection where the PO BOX substring is in the leftmost column
// SpreadsheetApp.getUi().alert(vals); //for checking values
var r; // variable for rows
for (r = 0; r < vals.length; r++){ // for each row, up to the last row (iterate over all rows from top to bottom)
if(vals[r][0].indexOf("PO") != -1){ // if first column in each row contains "PO"
SpreadsheetApp.getUi().alert("found a PO BOX"); // make annoucement
var c; // variable for columns
var cols = []; // array for column data (for debugging)
for (c = 0; c < vals[r].length; c++){ // for each columns in row (iterating over each cell in row from left to right)
cols[c] = vals[r][c]; // add the current cell value to an array
vals[r][c+1] = vals[r][c]; // take the value from the current cell and assign it to the next cell (+1 to the column)
}
SpreadsheetApp.getUi().alert(cols); // show me the data that cas changed
}
}
ar.setValues(vals); // set new values to active range
}
catch(err){
SpreadsheetApp.getUi().alert(err);
}
}
期望:
获取数据范围(我打算的测试范围是B:1至D:12)
在每一行中迭代,并在每一行中迭代每一行 单元格(列)
如果当前行的第一个单元格(vals [r] [0])包含 子字符串“ PO”,那么我想更改该行的值,例如 他们都移了一列,离开了第一列 单元格为空字符串
我通过用相同的值替换当前值来更改值 值+1到列row(vals [r] [c])= row(vals [r] [c + 1])
Realit(EDIT)y:
超出了内存限制错误...可能发生无限循环...我想这可能是因为我要添加数据范围中不存在的列,但是我该如何解决这个问题?
解决了!!!
经过多次尝试和错误后,我得到了答案(张贴在他的回答中)
很高兴第一次解决自己的问题!
答案 0 :(得分:1)
我的问题正是我所期望的。我正在尝试分配超出范围的值。
我解决这个问题的方法是将我的所有值分配给一个数组(我也在过程中将它们移了过来),然后遍历范围(范围只是一个二维数组),分配了所有将值转移到范围列。
cp