我對使用 Google 表格有點陌生,并且在為票務系統創建按鈕時偶然發現了一個問題。我一直無法將復制的資料從第二行向下填充另一張紙,而不會出現間隙或覆寫現有資料。
該腳本基本上檢查是否選中了某一行的復選框,復制該行中的資料,將該資料移動到另一張作業表,然后將該行重置為其原始狀態。這意味著它不會完全洗掉行或格式,而只會復制內容。
這是我到目前為止一直在使用的代碼:
function MigrateInProgress() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Copy of New Tickets');
var s2 = ss.getSheetByName('In Progress');
var r = s.getRange('G:G');
var v = r.getValues();
var dataset = [];
for(var i=v.length-1;i>=0;i--)
if(v[0,i]=='true') {
var data = s.getRange(i 1,1,1,6).getValues();
s2.getRange(i 1,s2.getLastColumn()-6,data.length,6).setValues(data);
var datasetrange = s.getRange(i 1,1,1,6);
datasetrange.clear({contentsOnly: true});
datasetrange.clear({formatOnly: false});
s.getRange(i 1,7).setValue(false);
}
}
這里有一些截圖可以幫助我理解我的意思:
截圖 1
截圖 2
截圖 3
任何幫助將不勝感激。謝謝!
uj5u.com熱心網友回復:
我相信你的目標如下。
- You want to copy the rows of columns "A" to "F" of the source sheet to the destination sheet when the checkbox of column "G" is checked.
- 那時,您要清除“A”到“F”列并取消選中“G”列。而且,您希望將值復制到目標作業表而不包括空行。
在這種情況下,如何進行以下修改?
修改后的腳本:
function MigrateInProgress() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getSheetByName('Copy of New Tickets');
var s2 = ss.getSheetByName('In Progress');
var v = s.getRange('A2:G' s.getLastRow()).getValues();
var { values, clear, uncheck } = v.reduce((o, r, i) => {
if (r[6] === true) {
var row = i 2;
o.values.push(r.splice(0, 6));
o.clear.push(`A${row}:F${row}`);
o.uncheck.push(`G${row}`);
}
return o;
}, { values: [], clear: [], uncheck: [] });
console.log(values)
if (values.length > 0) {
s2.getRange(s2.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
s.getRangeList(clear).clearContent();
s.getRangeList(uncheck).uncheck();
}
}
在此修改中,首先從源表中檢索所有值。并創建用于復制到目標作業表的值,并創建用于清除單元格和取消選中復選框的范圍串列。
順便說一句,通過檢索的值
getValues是二維陣列,在這種情況下,復選框回傳布爾型別。所以當你想用的時候v[0,i]=='true',就可以用v[i][0] === true。
關于一些不清楚的地方,我猜測如下。
- 當值被復制到目標作業表時,我不明白您是否要將值放在哪里。因此,在此修改中,值將附加到目標作業表。當您不想附加值時,請修改
s2.getRange(s2.getLastRow() 1, 1, values.length, values[0].length).setValues(values);為s2.getRange(2, 1, values.length, values[0].length).setValues(values);. 這樣,值總是從第 2 行開始。
參考:
- 減少()
- 類 RangeList 的 clearContent()
- 類 RangeList 的 uncheck()
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/407253.html
標籤:
上一篇:為什么表格中沒有彈出此錯誤訊息?
