繁体   English   中英

如何使用 Google Sheets Macros 从一张工作表复制值并将它们粘贴到另一张工作表中?

[英]How to copy values from one sheet and paste them into another using Google Sheets Macros?

我正在编写 Google 表格宏,但对语法没有很多了解。

我想要做的是以下内容:

我想将源矩阵中匹配的值复制到另一个表中。 但是,我不知道如何将其编写为宏。

我编写了以下代码:

function CalcularCruces() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = spreadsheet.getSheetByName("Cruces Activo-Amenazas");
  var destinationSheet = spreadsheet.getSheetByName("Análisis de Riesgos");

  /** Total number of left column values from source table **/
  const maxAmenazas = 29;

  for(var i = 0; i < maxAmenazas; i++) {
    /** Now I need to get the column and row values which are matching with the checkbox 
        and paste them into another table **/
  }

};

以下是输入表的示例以及执行宏后输出表的外观。

输入表输出表

编辑:

我需要在此静态列旁边写入数据:

实际产量实际产量

期望输出期望输出

您可以执行以下操作:

  • 通过getDataRangegetValues从源表中检索数据。
  • 对于此数据中的每一行(不包括已使用shift从数组中检索和删除的标题行),检查哪些列标记了复选框。
  • 如果相应的复选框被标记,则使用setValues将相应的值写入目标工作表。

它可能是这样的:

function CalcularCruces() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sourceSheet = spreadsheet.getSheetByName("Cruces Activo-Amenazas");
  var destinationSheet = spreadsheet.getSheetByName("Análisis de Riesgos");
  destinationSheet.getRange("A2:B").clearContent();
  var values = sourceSheet.getDataRange().getValues(); // 2D array with all data from source sheet
  var headers = values.shift(); // Remove and retrieve the headers row
  for (var i = 1; i < values[0].length; i++) { // Iterate through each column
    for (var j = 0; j < values.length; j++) { // Iterate through each row
      var activo = values[j][0]; // Activo corresponding to this row
      if (values[j][i]) { // Check that checkbox is marked
        // Get the row index to write to (first row in which column A and B are empty):
        var firstRow = 2;
        var firstCol = 1;
        var numRows = destinationSheet.getLastRow() - firstRow + 1;
        var numCols = 2;
        var firstEmptyRow = destinationSheet.getRange(firstRow, firstCol, numRows, numCols).getValues().filter(function(row) {
          return row[0] !== "" && row[1] !== "";
        }).length + firstRow;
        // Write data to first row with empty columns A/B:
        destinationSheet.getRange(firstEmptyRow, firstCol, 1, numCols).setValues([[headers[i], activo]]);
      }
    }
  }
};

笔记:

  • 每次运行脚本时,所有数据都会添加到目标工作表中,这可能会导致重复行。 如果你想避免这种情况,你可以在脚本的开头使用clearContent ,在声明destinationSheet ,删除所有以前的内容(不包括标题):
destinationSheet.getRange("A2:B").clearContent();
  • 在这个示例中, amenazas的数量不是硬编码的,但它使用getValues().length动态获取源表中的行数。 我想这对你来说是个好结果。
  • 更新:由于您的目标工作表中有其他列,因此您不能使用appendRow而是setValues 首先,您必须找到 A 列和 B 列为空的第一行的索引。 这是通过过滤 AB 列中的值数组并过滤掉两个值为空的元素(使用filter )来实现的。

参考:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM