首页 > 解决方案 > 如何在任何 G 表格单元格中激活一个宏,该宏将在下一个单元格中复制和粘贴值?

问题描述

我正在寻找一种使用 G 脚本的简单方法来复制和粘贴宏启动时选择的任何单元格的值 - 或者更好的是,复制和粘贴由其位置定义的单元格的值,与所选单元格相比宏启动。

只是为了让它更明确一点,这是我的全部需求:我在电子表格中有两列,一列带有复选框(“TRUE”或“FALSE”),我想要一个宏来转换下一列中的公式将同一行转换为硬值(复制和粘贴值),只要勾选第一列中的框(“FALSE”到“TRUE”)。

到目前为止,我一直在尝试这样的事情,为了 1)选择当前单元格 2)转到右侧的下一个单元格 3)从中复制并粘贴值:

function PasteValue() {
  var spreadsheet = SpreadsheetApp.getActive();
  var currentCell = spreadsheet.getCurrentCell();
  spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.RIGHT).activate();
  currentCell.activateAsCurrentCell();
  spreadsheet.getActiveRange().copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};

这可能完全是胡说八道。

标签: google-apps-script

解决方案


您可以使用onEdit(e) 简单的触发器来做到这一点,如下所示:

function onEdit(e) {
  const checkboxColumn = 'Sheet1!C2:C';
  const columnOffset = 1;
  const checkboxes = SpreadsheetApp.getActive().getRange(checkboxColumn);
  if (e.value !== 'TRUE'
    || e.range.columnStart !== checkboxes.getColumn()
    || e.range.rowEnd < checkboxes.getRow()
    || e.range.rowStart > checkboxes.getLastRow()
    || e.range.getSheet().getSheetId() !== checkboxes.getSheet().getSheetId()) {
    return;
  }
  const cell = e.range.offset(0, columnOffset);
  cell.setValue(cell.getValue());
}

推荐阅读