复制粘贴谷歌电子表格

时间:2015-05-04 16:19:49

标签: google-apps-script macros copy-paste

因此,我制作了一个Google电子表格供一群人用来跟踪每周"计数"对于Reddit子上的一大群人。我尝试自动化的东西有两件事。我遇到问题的那个是我认为最简单的那个,只是从一组(G2:G200)中复制值来覆盖另一组中的值(E2:E200)。我也有其他一些问题,但是我更感兴趣的是解释我在那里做错了什么,而不仅仅是答案。最大的一点就是应该在工作表上制作一个自定义菜单,即使我基本上从谷歌教程中复制了脚本,我似乎无法正常工作。我已经尝试过这两种方式的脚本,一种是在录制相同的基本内容时使用与Excel相同的脚本:

function UpdateLore_() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.alert(
     'Please confirm',
     'Only do this once per week, at end of updates.',
     ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
    Range("G2:G200").Select;
    Selection.Copy;
    Range("E2:E200").Select;
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False;

  } else {
    // User clicked "No" or X in the title bar.
    ui.alert('No Changes Made.');
  }
}

这会在" Selection.PasteSpecial"上返回一个反恐。线。我尝试过的另一种方式是使用我在网上找到的内容:

  // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
    function copyFunction () {
      var inputRange =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
      var inputValue = inputRange.getValue();
      var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200");
}

代码的顶部如下所示:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Weekly Update')
      .addItem('Update for Lore', 'UpdateLore')
      .addItem('Update for XP Master', 'UpdateMaster')
}

我觉得我错过了一些非常明显的东西,特别是整个"似乎无论如何都无法改变工作表"部分。谢谢你的帮助

得到了一些答案,现在它可以了,感谢所有的帮助:

知道了,感谢所有的帮助。新代码如下所示:

function UpdateLore() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.alert(
     'Please confirm',
     'Only do this once per week, at end of updates.',
      ui.ButtonSet.YES_NO);

  // Process the user's response.
  if (result == ui.Button.YES) {
    // User clicked "Yes".
    copyFunction ();
  }

    function copyFunction () {
      var inputRange =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
      var inputValues = inputRange.getValues();
      var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200").setValues(inputValues);
    }

  if (result ==ui.Button.NO) {
    // User clicked "No" or X in the title bar.
    ui.alert('No Changes Made.');
  }
}

2 个答案:

答案 0 :(得分:0)

要将数据添加到您需要使用的工作表:

你在if机构内部有一个功能:

if (result == ui.Button.YES) {
  // User clicked "Yes".
  function copyFunction () {
   . . . . 
  }
}

如果您想在此时调用另一个函数,可以使用:

if (result == ui.Button.YES) {
  // User clicked "Yes".
  copyFunction ();
};

function copyFunction () {
  . . . 
};

答案 1 :(得分:0)

您需要将inputRange中的值设置为outputRange。使用outputRange上的.setValues()来执行此操作。

function copyFunction () {
      var inputRange =  SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("G2:G200");
      var inputValues = inputRange.getValues();
      var outputRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1").getRange("E2:E200").setValues(inputValues);
}

这些都不是有效的应用脚本代码:

Range("G2:G200").Select;
    Selection.Copy;
    Range("E2:E200").Select;
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False;