我有一本包含多个源表和一个“输出”表的工作簿。
我想在源工作表中的每一行上有一个按钮,将 7 个单元格复制到按钮左侧,将它们转换为一列并将其粘贴到输出工作表中的特定位置。
我最难的是让函数知道它应该选择哪些单元格,因为我必须能够将按钮复制到我想要的任何地方并且仍然可以工作。
预期结果
当我单击“POST”按钮时,它不必看起来像那样,但必须放置在那里,它应该准确复制按钮左侧的 7 个单元格,无论按钮本身在哪里......
...然后将它们垂直粘贴到输出表上的 C4 至 C10 单元格中
我不需要它来检查或更改内容或类似的事情
您想要将数据从多个工作表之一上的指定行复制到输出工作表。您建议使用按钮,但此答案使用
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);
}
}
样本 - 输入表格
样本 - 输出