如何制作一个按钮,将旁边单元格中的数据发送到另一个Sheet?

问题描述 投票:0回答:1

我有一本包含多个源表和一个“输出”表的工作簿。

我想在源工作表中的每一行上有一个按钮,将 7 个单元格复制到按钮左侧,将它们转换为一列并将其粘贴到输出工作表中的特定位置。

我最难的是让函数知道它应该选择哪些单元格,因为我必须能够将按钮复制到我想要的任何地方并且仍然可以工作。

预期结果

当我单击“POST”按钮时,它不必看起来像那样,但必须放置在那里,它应该准确复制按钮左侧的 7 个单元格,无论按钮本身在哪里......

Source Sheet

...然后将它们垂直粘贴到输出表上的 C4 至 C10 单元格中

Output Sheet

我不需要它来检查或更改内容或类似的事情

google-sheets button
1个回答
0
投票

您想要将数据从多个工作表之一上的指定行复制到输出工作表。您建议使用按钮,但此答案使用

checkbox
。与事件对象一起使用时,这将识别已编辑的工作表、已编辑的行、已编辑的列和已编辑的值。这使得很容易测试继续或中止该功能。


function onEdit(e) {

// Logger.log(JSON.stringify(e))

var sheetsToWatch = ["Sheet1","Sheet2","Sheet3"]
var outputSheetName = "Output"
var columnToWatch = 8 // column H

// Logger.log("DEBUG: edited column = "+e.range.columnStart+", sheet = "+e.source.getActiveSheet().getName()+", indexOf = "+sheetsToWatch.indexOf( e.source.getActiveSheet().getName() )+", edited value = "+e.value+", edited row = "+e.rowStart)

// test for edit in Column H, in one of the named sheets and a value = true
if (e.range.columnStart !== columnToWatch
      || sheetsToWatch.indexOf( e.source.getActiveSheet().getName() ) === -1 
      || e.value !== 'TRUE')
  {
    // Logger.log("DEBUG: do nothing")
    return
  }
  else{
    // Logger.log("DEBUG: do something")

    // define the data range for the values to be copied
    var sourceRange =  e.source.getActiveSheet().getRange(e.range.rowStart,1,1,7)
    // Logger.log("DEBUG: The source range = "+sourceRange.getA1Notation())
    var sourceData = sourceRange.getValues()
    // Logger.log(sourceData)

    // define the output range
    var targetRange = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(outputSheetName).getRange("B1")
    // copy the data, and transpose the results
    sourceRange.copyTo(targetRange, SpreadsheetApp.CopyPasteType.PASTE_VALUES,true);
  }
}

样本 - 输入表格


样本 - 输出

© www.soinside.com 2019 - 2024. All rights reserved.