首页 > 解决方案 > 我希望我在列的单元格内输入的值自动转换为负谷歌应用脚​​本

问题描述

function newColumn_U() {
    var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName('Sheet1');
    var targetSheet = ss.getSheetByName("Sheet1");
    targetSheet.insertColumnAfter(targetSheet.getLastColumn());
    var targetRange = targetSheet.getRange(1,targetSheet.getLastColumn()+1).setValue(new Date()).setNumberFormat('d/M/yyyy - U');
}

我创建了一个代码,在谷歌表上创建一个新列来管理输出。该栏的名称是today's date - U(以意大利语发布)。我希望我在列的单元格内输入的值自动转换为负数。

标签: google-apps-script

解决方案


假设automatically transformed into negative您的意思是将正数转换为负数(反之亦然),并且要查找的列是工作表中包含内容的最后一列,您可以onEdit为此使用简单的触发器,以便任何数字用户添加到此列的内容变为负数:

function onEdit(e) {
  const range = e.range;
  const value = e.value;  
  const lastColumn = range.getSheet().getLastColumn();
  if (!Number.isNaN(value) && value > 0 && range.getColumn() === lastColumn && range.getRow() > 1) {
    range.setValue(-value);
  }
}

此脚本使用event object来检查是否:

  • 编辑后的值是一个数字,使用Number.isNaN()
  • 这个数字是正数。
  • 编辑的列是行中的最后一列。
  • 编辑的行不是标题。

更新:

如果要对标题包含的所有列执行此- U操作,则可以改为执行此操作:

function onEdit(e) {
  const range = e ? e.range : SpreadsheetApp.getActive().getActiveRange();
  const value = e ? e.value : range.getValue();
  const colIndex = range.getColumn();
  const header = range.getSheet().getRange(1,colIndex).getDisplayValue();
  if (!Number.isNaN(value) && value > 0 && header.toString().includes("- U") && range.getRow() > 1) {
    range.setValue(-value);
  }
}

参考:


推荐阅读