表格脚本:激活按钮,将数据从单元格复制到表格,然后清除数据范围

时间:2018-05-16 19:54:48

标签: google-apps-script google-sheets

我很高兴使用google工作表的公式来完成大量的工作。但是现在,我发现我需要一个按键操作的系统"和脚本编写是我刚刚开始涉足的问题。

我正在尝试创建一个脚本,该脚本将在名为“测试器页面”的工作表上读取单元格(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);
}

修改 所以我启动并运行了脚本(包括使用可点击的按钮)。一切顺利,直到我们决定对页面的工作方式进行一些更改。我们决定采用整行数据(第22行),而不是将1个单元格的内容复制到第二页(称为' Transactions')。我现在添加了我的脚本,它将复制一个单元格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)

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

2 个答案:

答案 0 :(得分:0)

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

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();
}

答案 1 :(得分:0)

我按照我想要的方式工作。它将一行单元格复制到一个新工作表,在新工作表的顶部插入一个空行(这样我的复制数据就不会被覆盖),并清除我需要清理的单元格区域中的数据。当用户点击屏幕上的按钮时,我也会运行它。总的来说,我很高兴它有效。

这里有它的所有荣耀:

function mainThing() {
//get content
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Store Page');
var cell = sheet.getRange("A22:Z22").getValues();

//copy content
var destination = ss.getSheetByName('Transactions');//whatever page
var destCell = destination.getRange("A3:Z3");
destCell.setValues(cell);

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


//clear content
clearThis("C5:C16");
clearThis("E5:E16");
clearThis("C2");
}



//content clearer
function clearThis(range){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheetByName('Store Page');
 var theRange = sheet.getRange("C5:C16");
 var theRange2 = sheet.getRange("E5:E16");
 var theRangeName = sheet.getRange(2, 3);
 theRange.clearContent();
 theRange2.clearContent();
 theRangeName.clearContent();
}