除了获取一行数据外,此程序运行正常。它总是抓住一组空白。有人看到我错过了吗?复制和粘贴愚蠢的行应该很简单。
我需要从编辑行中的D:BA中获取数据。接下来,删除创建数据的公式,然后将保存的数据粘贴回行中,以便我自定义它。
function onEdit(e) {
if(e.range.columnStart != 1 ||
e.source.getActiveSheet().getName() != "Loads")
/*e.source.getActiveSheet().getName() != "Loads") ||
e.range.rowStart != 9 || e.range.columnStart != 1 ||
e.range.rowEnd != 53 ||
e.range.columnEnd != 1*/
){
return;
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Loads");
var arr = [];
var r = e.range.getRow();
var cell1 = sheet.getRange(r,1);
var cell2 = sheet.getRange(r,2);
var lastColumn = sheet.getLastColumn();
var row = sheet.getRange(r,4,49,49);
var value = e.value;
var arr = [];
// get cell 2
var cell2value = cell2.getValue();
// delete cell
cell2.clear();
//paste formula
cell2.setFormula('=split(REGEXREPLACE(A'+r+',\",\",\", \"),\",\",true)');
// copy row r,3,1,40
//var row2 = sheet.getRange(r,4,1,10);
var rowValues = row.getValues();
//push row values to array
arr.push(rowValues);
// clear e.range
cell1.clear();
// delete cell
cell2.clear();
// paste cell
//cell2.setValue(cell2value);
// paste row
row.setValues(arr);
}
};
答案 0 :(得分:0)
首先,您的逻辑永远不会被执行:如果您的if()
条件评估为true
,onEdit(e)
执行return
&没有其他事情发生,否则(当if()
评估为false
时)没有其他代码要执行。您可能意味着if(!foo){ return; }
,否则您需要添加else
子句。此外,如果编辑其他“载荷”的任何工作表上的单元格A1,则if()
条件将评估为true:我不确定这是否是您想要的。你可能想在这里使用逻辑AND。
接下来,您只是从“载荷”工作表中获取数据:您从不参考编辑过的工作表中的行。您可能需要2个工作表对象:一个用于已编辑的工作表,您可以使用ss.getActiveSheet()
& “负荷”的第二个。
当您拨打sheet.getRange()
时,您也会抓取49x49阵列,这意味着您的range.getValues()
来电也会返回49x49数值,这不是您想要的说明。你的意思是sheet.getRange(r,4,1,49)
? (返回1x49数组。)
arr.push(rowValues)
将您的2D数组rowValues
推送到arr[]
中的新数组元素,使arr[]
成为3D数组(arr[0]
包含49x49数组rowValues
)。如果您需要将rowValues
复制到另一个变量,只需指定它:var arr = rowValues;
您是否尝试清除公式表单cell2
?如果是这样,您需要设置一个空公式,因为range.clear()
会保留公式。
其他一切似乎都运转良好,但我不确定你到底想要做什么。我希望这有帮助,所以。