Google Apps脚本:将单元格值复制到另一个包含条件的工作表,以复制和定位值

时间:2015-08-13 19:04:43

标签: javascript google-apps-script google-sheets

我有一张4张电子表格:“List”,“Map N1”,“Map N2”和“Map N3”。它应该作为金属单位存款的控制。

“列表”包含以下列:

-MU(金属单位)

- 重量

- 位置(等级)

-Position(Letter)

-Position(Number)

- 到达日期和时间

- 出发日期和时间

-Destination

-Status

-Observations

当MU到达时,输入数据并且“Status”列接收“Awaiting positioning”作为值。当MU位于存款内时,“状态”变为“定位”。我需要做的是:

- 当“状态”更改为“已定位”时,将相应MU列的值复制到其中一个地图,具体取决于“位置(级别)”。如果“位置(级别)”为“N1”,则转到“映射N1”,“N2”转换为“映射N2”,所以它会进入。

- 地图表如下所示: Map sheet

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

我搜索并设法找到此代码:

if __name__ == "__main__":
    etc

这个想法是使用这个代码来弄清楚如何自动复制值,然后使其适应定位事物。但这甚至没有将值复制到另一张表。

2 个答案:

答案 0 :(得分:2)

您可以使用 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()); 
}
}

答案 1 :(得分:0)

function onEdit(event) {      
  var range = event.range;
  var fromRow = range.getRow();
  var fromCol = range.getColumn()
  ...
  s.getRange(fromRow, fromCol, 1, 1).copyTo(target);