当我 运行 在 google 工作表上编写脚本时,我的公式消失了

When I run a script on google sheets my formulas disappear

您好,我是 Google sheet 上的脚本新手。我有以下脚本,根据 Id 将值从一个 sheet 复制到另一个。问题是我的目标 sheet “产品积压 - 如何? - 功能”有公式,但是当我 运行 脚本时,它们都消失了。为什么会这样?

这是代码

function onEdit(e) {
  if(e.range.getSheet().getName() != 'Sprint'){return;}
   if(e.range.columnStart==1) {
    var idTarea=e.range.offset(0,1).getValue();
    var rgBacklog=e.source.getSheetByName('Product Backlog - How? - Funcional').getDataRange();
    var valuesBacklog=rgBacklog.getValues();
    for(var i=1;i<valuesBacklog.length;i++) {
        if(valuesBacklog[i][2]==idTarea) {
        valuesBacklog[i][0]=e.value;
        break;
      }
    }    
  }
  rgBacklog.setValues(valuesBacklog);
}

工作簿的功能是这样的

1-我在 Sheet“路线图 - 为什么?- Estrategico”上完成了值

2-我验证 Sheet“Product Backlog - How? - Funcional”上的单元格值,然后我创建一些 ID

3-根据条件数据查询到sheet“Sprint”

4- 当有人使用本次更新的脚本编辑 sprint 列“estado”时 sheet “Product Backlog - How? - Funcional”上的列“estado”

在我 运行 脚本之后,我所有的公式“产品积压 - 如何? - 功能”消失了

这里是工作簿的例子https://docs.google.com/spreadsheets/d/11RQYPp0teUd2phYw4DoRRz70Xm3vJR8kwo8clQGzfWs/edit?usp=sharing

能否提供更多信息或目的地的屏幕截图sheet?

一个可能的问题是,当使用 .getValues().setValues() 时,数组中的任何空白单元格都会覆盖目标范围内的公式单元格; vice-versa 和 .getFormulas() / .setFormulas().

如果是这种情况,一种解决方案是将“值”数组与“公式”数组合并,如果不存在公式值(空白单元格),则在每个索引处填充值。

const formulas = DESTINATION_SHEET.RANGE.getFormulas()
const values = DATA_SHEET.RANGE.getValues()

const data = formulas.map((row, rowIndex) => 
                  row.map((col, colIndex) => 
                      col || values[rowIndex][colIndex]))

如果这不能解决您的问题,请告诉我!

如果您只需要更新一个值 (estado) 试试

function onEdit(e) {
  if (e.range.getSheet().getName() != 'Sprint') { return; }
  if (e.range.columnStart == 1) {
    var idTarea = e.range.offset(0, 1).getValue();
    var rgBacklog = e.source.getSheetByName('Product Backlog - How? - Funcional').getRange('A:C');
    var valuesBacklog=rgBacklog.getValues();
    for(var i=1;i<valuesBacklog.length;i++) {
        if(valuesBacklog[i][2]==idTarea) {
        e.source.getSheetByName('Product Backlog - How? - Funcional').getRange(+i+1,1).setValue(e.range.getValue())
        break;
      }
    }    
  }
}