当前位置: 首页 > 知识库问答 >
问题:

复制并粘贴多行到另一张工作表上的下一个空行

郁吉星
2023-03-14

我有以下脚本

function onEdit(event) {
  // assumes source data in sheet named Needed
  // target sheet of move to named Acquired
  // test column with yes/no is col 5 or E
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();
  if(s.getName() == "IN" && r.getColumn() == 7 && r.getValue() == "Y") {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("ORDERS");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);

  }
}

这是我找到脚本的原始帖子:https://support.google.com/docs/forum/AAAABuH1jm0hR40qh02UWE/?hl=en

我想对代码做一些小的调整,但不知道从哪里开始。

目前,当在G列中输入“Y”时,它复制整行,并将行内容放在ORDERS!的最后一行!。

我想让它做的是:

1) 仅复制订单最后一行上的B、C和E列!2) 在中删除E和F中的值!在为特定行运行代码之后(不希望它删除我没有用“Y”表示的行)3)是否有一种方法可以使用一个按钮,即当单击按钮时,它会立即复制所有带有“Y”的行?

如果您想玩游戏,这里有一个指向我的工作表的链接:https://docs.google.com/spreadsheets/d/1Peo5_5QmkxVyL7j5bmgtMs9BL16cvsGhhOSuRV_TsAo/edit?usp=sharing

致以最良好的祝愿

共有1个答案

东龙野
2023-03-14

我相信你的目标如下。

  • 当列G为Y时,您希望将列B、C和E的值复制到工作表ORDERS的最后一行。
    • 当脚本运行时,您要复制列G为Y的所有行。

    对于这个,这个答案怎么样?

    • 在你的剧本中,
      • 当通过单击工作表上的按钮运行脚本时,无法使用事件对象。
      • 您的脚本复制活动范围的一行。
      • 未删除复制行的列E和F。

      需要对上述修改点进行修改。当上述各点反映到脚本中时,它将变成如下所示。

      请复制并粘贴以下脚本到脚本编辑器。并请准备一个正在绘图和/或图像的按钮,并将函数run分配给该按钮。这样,当单击按钮时,脚本就会运行。并且将列G为Y的所有行的列B、C和E从工作表IN复制到工作表ORDERS的最后一行。

      function run() {
        var ss = SpreadsheetApp.getActiveSpreadsheet();
        var srcSheet = ss.getSheetByName("IN");
        var dstSheet = ss.getSheetByName("ORDERS");
      
        // 1. Retrieve the values from "A2:G" of sheet "IN".
        var srcValues = srcSheet.getRange("A2:G" + srcSheet.getLastRow()).getValues();
      
        // 2. Create an object for putting values and deleting the contents of the columns "E" and "F".
        var obj = srcValues.reduce((o, [,b,c,,e,,g], i) => {
          if (g == "Y") {
            o.values.push([b, c, e]);
            o.ranges.push(`E${i + 2}:F${i + 2}`);
          }
          return o;
        }, {values: [], ranges: []});
      
        // 3. Copy the values to the sheet "ORDERS".
        dstSheet.getRange(dstSheet.getLastRow() + 1, 1, obj.values.length, obj.values[0].length).setValues(obj.values);
      
        // 4. Delete the contents of the columns "E" and "F" of sheet "IN".
        srcSheet.getRangeList(obj.ranges).clearContent();
      }
      
      • 关于运行GoogleApps脚本的按钮,我认为这个站点很有用。Ref在您的情况下,请在工作表“In”上创建一个按钮,并将功能run分配给该按钮。这样,当单击按钮时,脚本工作
      • 请将此脚本与V8一起使用
      • 设置值(值)

 类似资料:
  • 我最近开始在GoogleSheets中做一些工作,以前我可以在Excel中编写函数,但我无法在GoogleSheets脚本中实现这一点。 我有两张床单 第1页。单元格A1-E5包含基于某些选择标准表2的值。登记表 我需要的是在执行脚本时(通过绘图和链接宏) 我需要它来复制A1:E1范围 进入第2页,转到A列的第一个空白单元格,然后粘贴值。 我正在使用下面的脚本,并且 目标范围的坐标超出工作表的尺寸

  • 我写了下面的代码,并不断地看到。我试图克服这个问题,但似乎没有任何效果。我正试图从一个工作簿复制整个工作表,并将其粘贴到另一个工作簿中:

  • 我有一张谷歌表格,里面有多张不同的表格。每次我向第一张工作表的单元格(比如G2: I1000中的任何单元格)添加文本时,我都希望其他几个单元格的值出现在第二张工作表的下一个空行中。例如,如果我在第一张工作表上向I5添加文本,那么我希望自动将单元格A5: B5的值粘贴到第二张工作表(也在列A和B中)的下一个空行。

  • > 我正在尝试编写一个脚本,它将从一个工作表上的范围复制数据,并在B列的第一个空单元格中粘贴到另一个。我有一个脚本,可以将其粘贴到工作表中的第一个空单元格中这工作正常,但是我在列A中有一行静态的身份证号码,所以当它粘贴数据时,它就在工作表的下面。所以,我需要一种跳过列A并粘贴到列B中的第一个空单元格的方法。希望这有意义。 另一部分是B列中有时会有空单元格。所以它需要跳过这些来获得最后一个空单元格。

  • 我写了一个google脚本来创建和粘贴从一个单元格到另一个单元格的值(相同的电子表格)。该守则包括以下两个步骤: > (不工作):将相邻单元格的新值粘贴到第二张工作表中下一个空行(第1列)的单元格中。 下面的代码是我迄今为止尝试过的代码,但第二页上没有显示该值。有人知道我在下面的尝试中的问题在哪里吗? 谢谢你