繁体   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-2025 STACKOOM.COM