[英]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.