当我运行一个脚本在谷歌表我的公式消失



大家好,我是Google表单脚本的新手。我有以下脚本,根据Id将值从一个表复制到另一个表。问题是我的目标表单"产品待办事项列表——怎么做?"——Funcional"有公式,但当我运行脚本时,所有的公式都消失了。为什么会这样?

代码

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-我填写表格"路线图"上的值-为什么?——Estrategico"

2-我如何验证工作表"产品待办事项列表"上的单元格值?——Funcional"然后我创建了一些id

3-根据条件查询数据到表"Sprint">

4-当有人编辑sprint栏"estado"用脚本编写此更新表列"建立"。关于"产品待办事项列表"——怎么做?——Funcional"

在我运行脚本后,我所有的公式"产品待办事项-如何?——Funcional"消失

下面是工作簿的示例https://docs.google.com/spreadsheets/d/11RQYPp0teUd2phYw4DoRRz70Xm3vJR8kwo8clQGzfWs/edit?usp=sharing

如果你只需要更新一个值(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;
}
}    
}
}

您能提供更多信息或您的目标表的屏幕截图吗?

一个可能的问题是,当使用.getValues().setValues()时,数组中的任何空白单元格将覆盖目标范围中的公式单元格;.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]))

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

最新更新