[英]Google Apps Script: Copy cell value to another sheet with condition to copy and position the value
我有一个包含4个工作表的电子表格:“列表”,“地图N1”,“地图N2”和“地图N3”。 应该用作控制金属单元的存放。
“列表”具有以下列:
-MU(金属单位)
-重量
-位置(级别)
-位置(字母)
-位置(数字)
-到达日期和时间
-出发日期和时间
-目的地
-状态
-观察
当MU到达时,将输入数据,并且“状态”列将接收“等待定位”作为值。 当MU放置在存放区中时,“状态”更改为“已放置”。 我需要做的是:
-当“状态”(Status)更改为“已定位”(Positioned)时,根据“位置(级别)”,将相应MU列的值复制到其中一个映射中。 如果“位置(级别)”为“ N1”,则转到“地图N1”,“ N2”为“地图N2”,然后转到。
-MU值应根据“位置(字母)”和“位置(数字)”值在图纸中定位。 这样,下面的MU应该像这张图一样转到工作表:
我搜索并设法找到以下代码:
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.source.getActiveRange();
if(s.getName() == "List" && r.getColumn() == 9 && r.getValue() == "Posicionada") {
var targetSheet = ss.getSheetByName("Map N1");
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
s.getRange(1, 1, 1, 1).copyTo(target);
}
}
想法是使用此代码找出如何自动复制值,然后使其适应定位对象。 但这甚至没有将值复制到另一张纸上。
您可以使用setValue()代替moveTo / copyTo 。
targetSheet.getRange(row,column).setValue(s.getRange(r.getRow(), 1, 1, 1).getValue());
如果需要的话,这是其余的代码。
它基本上使用单元格中的引用来获取正确的工作表,列和行。 由于您的列不是原始列,因此添加了一个循环以循环浏览“地图”表的第一行并找到正确的列。
function onEdit(event) {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = event.source.getActiveSheet();
var r = event.range;
if(s.getName() === "Lista" && r.getColumn() === 9 && r.getValue() === "Posicionada") {
var sheetname = s.getRange(r.getRow(),3).getValue();
var columnRef = s.getRange(r.getRow(),4).getValue();
var rowref = s.getRange(r.getRow(),5).getValue();
var targetSheet = ss.getSheetByName("Mapa " + sheetname);
var headers = targetSheet.getRange(1, 1, 1, targetSheet.getLastColumn()).getValues().toString().split(",");
var rows = targetSheet.getRange(1, 1, targetSheet.getLastRow(), 1).getValues().toString().split(",");
//Getting The correct Column
for (var i = 1; i < headers.length; i++) {
if (headers[i] === columnRef) {
break;
}
}
var column = i + 1;
//Getting the correct row
for (var i = 1; i < rows.length; i++) {
if (Number(rows[i]) === rowref) {
break;
}
}
var row = i + 1;
targetSheet.getRange(row,column).setValue(s.getRange(r.getRow(), 1, 1, 1).getValue());
}
}
function onEdit(event) {
var range = event.range;
var fromRow = range.getRow();
var fromCol = range.getColumn()
...
s.getRange(fromRow, fromCol, 1, 1).copyTo(target);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.