簡體   English   中英

Google Apps腳本:將單元格值復制到另一個工作表中,條件是要復制並放置該值

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM