javascript - 谷歌应用脚​​本: Copy cell value to another sheet with condition to copy and position the value

标签 javascript google-apps-script google-sheets

我有一个包含 4 个工作表的电子表格:“列表”、“ map N1”、“ map N2”和“ map N3”。它应该作为金属单元沉积的控制。

“列表”有以下几列:

-MU(金属单位)

-重量

-位置(级别)

-位置(字母)

-位置(数字)

-到达日期和时间

-出发日期和时间

-目的地

-状态

-观察结果

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

-当“状态”更改为“已定位”时,根据“位置(级别)”将相应 MU 列的值复制到其中一张 map 。如果“位置(级别)”是“N1”,则转到“ map N1”,“N2”转到“ map N2”,依此类推。

- map 表如下所示: Map sheet

-MU 值应根据“位置(字母)”和“位置(数字)”值在工作表中定位。这样,下面的 MU 就应该像下图一样进入工作表: List and Map sheet

我已经搜索并设法找到了这段代码:

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

如果您需要的话,这是其余的代码。

它基本上使用单元格中的引用来获取正确的工作表、列和行。由于您的列不是原始的,因此我添加了一个循环来循环遍历 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(",");

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

关于javascript - 谷歌应用脚​​本: Copy cell value to another sheet with condition to copy and position the value,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31996447/

相关文章:

google-apps-script - 在 Gmail Addon 上获取草稿正文

javascript - 在 javascript 中访问位置对象的最佳方式是什么?

google-apps-script - MailApp.sendEmail 错误消息 - "do not have permission to call sendEmail"

javascript - 将带有换行符和空格的输入拆分为数字数组,在数组末尾添加额外的 0

javascript - 合并两个 onEdits

javascript - 使用 javascript 进行 Google 电子表格搜索

javascript - 用于将行从一张纸移动到另一张纸的 Google 脚本的实现

google-sheets - 平均真实范围 - Google 表格

javascript - 如何区分浏览器返回和用户手动更改位置哈希

javascript - kendo ui网格中组的排序顺序