Google Apps脚本:将单元格值复制到另一个工作表,并使用条件来复制和定位该值 [英] Google Apps Script: Copy cell value to another sheet with condition to copy and position the value

查看:137
本文介绍了Google Apps脚本:将单元格值复制到另一个工作表,并使用条件来复制和定位该值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一张包含4张表格的电子表格:列表,地图N1,地图N2和地图N3。它应该作为金属单位存款的控制。

List包含以下列:

-MU(金属单位)

- 重量

- 位置(等级)



- 位置(Letter)

- 位置(数字)

- 到达日期和时间

- 离开日期和时间

- 预约



-Status

- 观察

当MU到达时,输入数据并且状态列接收等待定位作为值。当MU位于存款范围内时,状态更改为已定位。我需要做的是:



- 当状态更改为已定位时,将相应MU列的值复制到其中一个地图,具体取决于职位(等级)。如果位置(等级)是N1,它会转到地图N1,N2到地图N2,所以它就是这样。



- 地图页面如下所示:



我已经搜索并设法找到此代码:
$ b $ pre $ 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() strong>而不是 moveTo / copyTo

  targetSheet.getRange(row,column).setValue(s.getRange(r.getRow(),1,1,1 ).getValue()); 

如果您需要的话,以下是您的其他代码。



它基本上使用单元格中的引用来获取正确的表单,列和行。由于你的列不是原创的,我添加了一个循环来遍历Map表格的第一行并找到正确的列。

  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(,);

//获取正确的列
for(var i = 1; i< headers.length; i ++){
if(headers [i] === columnRef) {
break;
}
}

var column = i + 1;

//获取正确的行
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());
}
}


I have a spreadsheet with 4 sheets: "List", "Map N1", "Map N2" and "Map N3". It is supposed to work as a control for a deposit of Metallic Units.

"List" has these columns:

-MU (Metallic Unit)

-Weight

-Position (Level)

-Position (Letter)

-Position (Number)

-Arrival date and time

-Departure date and time

-Destination

-Status

-Observations

When a MU arrive, the data is entered and the column "Status" receive "Awaiting positioning" as value. When the MU is positioned within the deposit, the "Status" change to "Positioned". What I need to do is:

-When the "Status" change to "Positioned", copy the value of the respective MU column to one of the Maps, depending on the "Position (Level)". If the "Position (Level)" is "N1", it goes to "Map N1", "N2" to "Map N2" and so it goes.

-The Map sheets look like this:

-The MU value should position in the sheet according to the "Position (Letter)" and "Position (Number)" values. That way, the MU below should go to the sheet just like this image:

I've searched and managed to find this code:

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);    
    }
  }

The idea was to use this code to figure out how to copy the value automatically, and then adapt it to the positioning thing. But This isn't even copying the values to the other sheet.

解决方案

You can use setValue() instead of moveTo/copyTo.

 targetSheet.getRange(row,column).setValue(s.getRange(r.getRow(), 1, 1, 1).getValue()); 

Here is the rest of your code if you will need it.

It basically uses the reference in cell to get the correct sheet, column and row. As your columns are not original, I added a loop to cycle through the first row on the Map sheet and find the correct column.

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()); 
}
}

这篇关于Google Apps脚本:将单元格值复制到另一个工作表,并使用条件来复制和定位该值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆