我正在使用 MoveTo 函式根據單元格的值將一行從一個作業表移動到另一個作業表。
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.getColumn() == 2 && r.getRow() == 2 && r.getWidth() == 1 && r.getHeight() == 1) {
var sheetName;
switch (e.value) {
case "Pending":
sheetName = "Pending";
break;
case "In Hand":
sheetName = "In Hand";
break;
}
if (sheetName) {
const dest = e.source.getSheetByName(sheetName);
src.getRange(r.getRow(),1,1,18).moveTo(dest.getRange(dest.getLastRow() 1,1,1,18));
src.deleteRow(r.getRow());
}
}
}
它作業正常,我面臨的問題是公式。范圍內的公式始終參考原始作業表,而不是范圍移動到的作業表。
這是一個例子:
我在我的待處理作業表上使用以下公式
=ARRAYFORMULA(P2:P-L2:L)
當函式將此移動到In Hand作業表時 - 公式仍參考舊作業表,如下所示:
=ARRAYFORMULA(Pending!P2:P-Pending!L2:L)
這會破壞電子表格。搬家后我需要它看起來像這樣:
=ARRAYFORMULA('In Hand'!P2:P-'In Hand'!L2:L)
是否有可能:
- 編輯函式,以便除了移動行之外 - 它將任何公式實體更改
Pending!為'In Hand'!(反之亦然)。或者 - 在公式中參考活動作業表 - 類似于
=ARRAYFORMULA(***Active-Sheet*!**P2:P-*Active-Sheet*!L2:L)
如果我可以移動也可以使用的資料和公式。我希望這很清楚,我歡迎任何潛在的解決方案。
uj5u.com熱心網友回復:
而不是使用 moveTo
- 構建要“移動”的值和公式的陣列
- 然后使用 Range.setValues(values-formulas)
樣本:
function onEdit(e) {
const src = e.source.getActiveSheet();
const r = e.range;
if (r.getColumn() == 2 && r.getRow() == 2 && r.getWidth() == 1 && r.getHeight() == 1) {
var sheetName;
switch (e.value) {
case "Pending":
sheetName = "Pending";
break;
case "In Hand":
sheetName = "In Hand";
break;
}
if (sheetName) {
const dest = e.source.getSheetByName(sheetName);
const srcRange = src.getRange(r.getRow(),1,1,18);
const formulas = srcRange.getFormulas()[0];
const values = srcRange.getValues();
formulas.forEach((formula,i) => {
if(formula !== '') values[0][i] = formula;
});
dest.getRange(dest.getLastRow() 1,1,1,18)).setValues(values);
src.deleteRow(r.getRow();
}
}
}
uj5u.com熱心網友回復:
function onEdit(e) {
const sh = e.range.getSheet();
const shts = ["Pending","In Hand"]
const idx = shts.indexOf(e.value);
if (e.range.columnStart == 2 && e.range.rowStart == 2 && e.range.columnEnd == e.range.columnStart && e.range.rowStart == e.range.rowStart) {
if (idx) {
const dest = e.source.getSheetByName(shts[idx]);
sh.getRange(e.range.rowStart, 1, 1, 18).copyTo(dest.getRange(dest.getLastRow() 1, 1));
sh.deleteRow(e.range.rowStart);
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/416120.html
標籤:
上一篇:當我嘗試將數字附加到Python中的串列并將該串列發送到Google表格列時出現錯誤“無效值[1][0]:list_value”
