Google表单/表格脚本清除公式,行中的条件格式

时间:2016-12-01 03:08:57

标签: google-apps-script google-sheets

我有这个代码解析输入表单的数据,因为它被放入链接的电子表格中。我还有一个部分在最后将一个单元格设置为表单提交上的特定值。但是,输入提交的行中的任何公式或条件格式都会被清除。例如,我对接收上述特定值的单元格进行了颜色编码。但是,当我查看工作表的条件格式部分时,值的范围向下移动1.即:原始I2:I50;提交后I3:I51

有一个公式我必须执行一些完全清除的计算。这是我的剧本:

function onSubmit(e) {
  Logger.log("onSubmit() called with data:");
  Logger.log(e);

  var category = e.namedValues[ 'Location' ];
  Logger.log("category from onSubmit is " + category);
  Logger.log("range in sheet was:" + e.range.getA1Notation());

  var rowNum = e.range.getRow();
  Logger.log("row in range in sheet was " + rowNum);

  var columnNum = 3;
  Logger.log("last column in range in sheet was " + columnNum);

  var pieces = category.toString().split(" > ");
  Logger.log("split up category: ");
  Logger.log(pieces);


  var arrayLength = pieces.length;
  for (var i = 0; i < arrayLength; i++) {

    var targetColumnNum = columnNum + i;

    Logger.log("target Column " + targetColumnNum );
    Logger.log("setting row " + rowNum + " Column " + targetColumnNum + " to value " + pieces[i]);

    SpreadsheetApp.getActiveSheet().getRange(rowNum, targetColumnNum).setValue(pieces[i]);

  }
  targetColumnNum = 9;
  SpreadsheetApp.getActiveSheet().getRange(rowNum, targetColumnNum).setValue("(1)Open");
}

for循环如何操作会清除行中其他单元格的所有条件格式和公式?

1 个答案:

答案 0 :(得分:0)

每次通过表单提交数据时,工作表中的新行插入(在最近的提交下),数据将放在该新行中。这就是您在该行中没有任何格式或公式的原因。

以下是一些解决此问题的方法:1-2是维护公式的替代方法,3-4格式化。

  1. arrayformula处理整个列的计算(假设您的公式的逻辑可以用这种方式表示)。
  2. 使用setFormula中的onSubmit将公式插入到提交数据的每个新行中。
  3. 将条件格式从工作表的顶行复制到新行:例如,

    var range = sheet.getRange("A1:Z1");
    range.copyTo(newRow, {formatOnly: true});
    
  4. 脚本直接使用setBackground根据提交的值格式化单元格。