首页 > 解决方案 > 表格脚本:激活按钮,将数据从单元格复制到表格,然后清除数据范围

问题描述

我很擅长使用带有谷歌表格的公式来做大量的工作。不过,现在,我发现我需要一个“按钮操作”的系统,而脚本是我刚刚开始涉足的东西。

我正在尝试创建一个脚本,该脚本将读取名为“Tester Page”的工作表上的单元格 (D2) 的内容,并将单元格 D2 复制到同一文档中的单独工作表上。复制后,我需要这张表清除“测试仪页面”上的 B5:B16 和 D5:d16 范围。这两个范围内的数据是使用数据验证从下拉菜单中选择的。

最后一个问题是它需要被按钮激活。

因此,在我最初的尝试中,我现在正在尝试从单元格 D2 复制数据并将其附加到页面底部。它不起作用。对这一步或其他步骤的任何帮助都将是巨大的。这是我到目前为止所拥有的:

function addProduct() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Tester Page');
var value = sheet.getRange(2,4)
sheet.appendRow(value);
}

编辑 所以我启动并运行了脚本(包括使用可点击按钮)。一切都很顺利,直到我们决定对页面的工作方式进行一些更改。我们决定不是将 1 个单元格的内容复制到第二页(称为“事务”),而是要获取一整行数据(第 22 行)。我现在添加了我的脚本,它将复制一个单元格 20 次……而不是 20 列的字符串。我真的很想要整行,不只是 20 列的价值,但想不出来。

function mainThing() {
//get content
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Tester Page');
var cell = sheet.getRange(22,1).getValues();

//copy content
var destination = ss.getSheetByName('Transactions');//whatever page
var destCell = destination.getRange(2, 1, 1, 20)
destCell.setValue(cell);

//Add clean row
var add = ss.getSheetByName('Transactions')
add.insertRowBefore(2)

再次感谢您的帮助。你们真棒。

标签: google-apps-scriptgoogle-sheets

解决方案


根据变化,它会是这样的......

function mainThing() {
  //get content
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Tester Page');
  var lastCol = ss.getLastColumn();//get last column in the ss
  var cell = sheet.getRange(2, 1, 1, lastCol).getValues(); //get contents of row

  //copy content
  var destination = ss.getSheetByName('Transactions');
  var destRange = destination.getRange(2, 1, 1, lastCol);
  destination.insertRowBefore(2);
  destRange.setValues(cell);

  //clear content
  clearThis("B5:B16");
  clearThis("D5:D16");
}



//content clearer
function clearThis(range){
   var ss = SpreadsheetApp.getActiveSpreadsheet();
   var sheet = ss.getSheetByName('Tester Page');
   var theRange = sheet.getRange(range);
   theRange.clearContent();  
}

//straight from https://developers.google.com/apps-script/guides/menus

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Do Magic')
      .addItem('Presto', 'mainThing')      
      .addToUi();
}

推荐阅读