Google Apps脚本中的脚本,可将范围内的值复制到另一个工作表中

时间:2016-08-29 15:23:53

标签: google-apps-script

我正在开发一种工具,可以让我的公司跟踪其金融投资。

我需要创建一个简单的数据输入表单供用户输入交易数据,然后填充主表,这是该工具分析的基础。我不能通过Google表单执行此操作,因为数据输入表单使用了大量基于表单中其他数据的条件格式。

我上传了一张非常简化的表格来说明我需要的内容:this

我要找的是一个脚本,点击Submit表单中的Data Entry后,将 B12:E12 中的值(不是公式)复制到"主表"中的第一个空行(在本例中为第8行)片。理想情况下,点击"提交"还将清除"数据输入"中的 C4:C7 中的数据输入字段。片材。

我已经浏览了各种论坛以寻求解决方案,但没有找到任何确切的解决方案。我很遗憾地说我是Google Apps脚本的新手,因此我无法编写自己的代码进行分享,在此处提问时,我知道这是习惯性的。

如果有人能指出我正确的方向,我将不胜感激。我目前正在尝试使用在线资源学习JavaScriptGoogle Apps Script,但对于这个特定项目,我需要很长时间才能达到可以帮助自己的水平。

2 个答案:

答案 0 :(得分:1)

非常感谢,GEOWill!

您的回答解决了我的问题,感谢您的评论,我能够准确理解您的代码所做的事情。我只更改了代码以删除菜单(但非常感谢你向我展示了如何完成) - 我将函数绑定到作为绘图插入的Submit按钮。我还添加了一些代码,以便在单击按钮后清除条目范围的内容(这是其他人建议的)。

我使用的最终代码是:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var entry_sheet = ss.getSheetByName("Data Entry");
var master_sheet = ss.getSheetByName("Master Table");

function mySubmit() {
  var entry_range = entry_sheet.getRange("B12:E12")
  var val = entry_sheet.getRange("B12:E12").getDisplayValues().reduce(function (a, b) {
        return a.concat(b);
    });
 Logger.log(val);
  master_sheet.appendRow(val);
 entry_sheet.getRange("C4:C7").clearContent()
}

我希望这可以帮助其他人遇到类似的问题!喜欢这个社区的支持。谢谢你的帮忙。

答案 1 :(得分:0)

我首先使用菜单功能来运行你的代码(而不是单元格按钮)。您可以使用单元格按钮,但我相信您需要插入图像并为该图像指定javascript函数。

基本上,您首先要使用工具,脚本编辑器。创建一个onOpen函数并创建一个触发器,每次打开电子表格时都会运行onOpen()函数。在onOpen()函数中,我们创建了一个菜单,其中存在一个物理菜单项(一种按钮)(称为“提交”)。最后,我们将一个函数与此按钮相关联(我称之为mySubmit())。

mySubmit()函数内部存在您要查找的大多数功能。此时,只需从一个细胞范围复制并将它们粘贴到另一个细胞范围即可。为此,您会注意到我必须提前设置一些变量(ss,entry_sheet,master_sheet,entry_range和master_row)。

最后一件事,您可能希望保护Master表格,因为如果有人意外地编辑了编辑的最后一个单元格以外的单元格,则输入行将被复制到该行(由于getLastRow()函数的操作方式)。

希望这有帮助!

var ss = SpreadsheetApp.getActiveSpreadsheet();

var entry_sheet = ss.getSheetByName("Data Entry");
var master_sheet = ss.getSheetByName("Master Table");

function onOpen() {
  SpreadsheetApp.getUi()
    .createMenu('MyMenu')
    .addItem('Submit', 'mySubmit')
    .addToUi();
}

function mySubmit() {
  var entry_range = entry_sheet.getRange("B12:E12");
  var master_row = (master_sheet.getLastRow() + 1);

  entry_range.copyValuesToRange(master_sheet, 1, 3, master_row, master_row);
}