复制粘贴 google 电子表格

copy paste google spreadsheet

所以,我为一群人制作了一个 Google Spreadsheet,用于跟踪 Reddit 子上一大群人的每周 "counts"。我试图自动化的事情是两件事。我遇到问题的那个是我认为最简单的那个,只需复制一组 (G2:G200) 中的值以覆盖另一组 (E2:E200) 中的值。我也有其他一些问题,但我更感兴趣的是解释我在那里做错了什么,而不仅仅是一个答案。最大的一个是,这应该是在 sheet 上制作自定义菜单,但我似乎无法让它工作,即使我基本上从 Google 教程中复制了脚本.我已经尝试了这两种方式的脚本,一种使用与 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.');
  }
}

这 returns 是 "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')
}

我觉得我遗漏了一些非常明显的东西,尤其是整个 "doesn't seem to change the sheet in anyway" 部分。感谢您的帮助


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

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

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.');
  }
}

要向 sheet 添加数据,您需要使用:

您在 if 正文中有一个函数:

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

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

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

function copyFunction () {
  . . . 
};

您需要设置从输入范围到输出范围的值。使用 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);
}

None 这是有效的应用程序脚本代码:

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