当我 运行 在 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;
}
}
}
}
您好,我是 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;
}
}
}
}