google-apps-script - 表格脚本:激活按钮,将数据从单元格复制到表格,然后清除数据范围
问题描述
我很擅长使用带有谷歌表格的公式来做大量的工作。不过,现在,我发现我需要一个“按钮操作”的系统,而脚本是我刚刚开始涉足的东西。
我正在尝试创建一个脚本,该脚本将读取名为“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)
再次感谢您的帮助。你们真棒。
解决方案
根据变化,它会是这样的......
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();
}
推荐阅读
- javascript - 相反的枚举值 TypeScript
- apache-kafka - 如何通过jmx监控kafka中的消费者滞后?
- java - 如何为列表中的每个元素同时运行一个方法
- javascript - Typescript 返回“void”类型的参数不能分配给“TimerHandler”类型的参数?
- python - 为什么两个请求的 url 和 header 看起来一样,但状态码不同(分别为 404 和 200)?
- python - 是否可以为 npyscreen 文本字段中的输入键创建自定义处理程序?
- python-3.x - 我如何使用带有类名的 Selenium 从 Twitter 获取推文的日期时间
- json - 如何安全地检查用户是否是管理员并渲染所需的组件
- elasticsearch-5 - Elasticsearch 5 - 许多小型但非常不同的索引的设计方法?
- python-3.x - Pandas read_csv 向数据框添加一些非常小的值