我嘗試創建腳本以將一個特定行從一張紙復制到新行中的另一張紙。但是腳本總是復制替換最后一個。
我使用這個代碼:
function Test() {
var spreadsheet = SpreadsheetApp.getActive();
spreadsheet.getRange('A9:O9').activate();
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Logs'), true);
spreadsheet.getRange('A24').activate();
spreadsheet.getRange('Log!A9:O9').copyTo(spreadsheet.getActiveRange(),
spreadsheetApp.CopyPasteType.PASTE_VALUES, false);
spreadsheet.setActiveSheet(spreadsheet.getSheetByName('Log'), true);
spreadsheet.getRange('D9:O9').activate();
spreadsheet.getActiveRangeList().clear({contentsOnly: true, skipFilteredRows: true});
};
uj5u.com熱心網友回復:
您的腳本始終將資料復制到激活的范圍 - 這始終是 A24
通過指定要復制行的位置來重寫您的函式。如果您不想覆寫,可能您想在目標作業表的底部附加您的行。
你可以這樣做:
function Test() {
var spreadsheet = SpreadsheetApp.getActive();
var originSheet = spreadsheet.getSheetByName("Log");
var destSheet = spreadsheet.getSheetByName("Logs");
var rowContents = originSheet.getRange('A9:O9').getValues().flat();
destSheet.appendRow(rowContents);
};
或者,您可以將資料復制到第一個空行:
function Test() {
var spreadsheet = SpreadsheetApp.getActive();
var originSheet = spreadsheet.getSheetByName("Log");
var destSheet = spreadsheet.getSheetByName("Logs");
var firstEmtyRow = destSheet.getLastRow() 1;
var destRange = destSheet.getRange('A' firstEmtyRow ':O' firstEmtyRow);
originSheet.getRange('A9:O9').copyTo(destRange,
spreadsheetApp.CopyPasteType.PASTE_VALUES, false);
};
參考:
- getSheetByName()
- 追加行()
- 平坦的()
- 獲取最后一行()
正如@Mike Steelson 所指出的,激活作業表和范圍并不是一個好習慣。如果您錄制宏,它會在后臺執行,但容易出錯,因此如果您自己撰寫腳本 - 避免activate().
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404510.html
標籤:
上一篇:Google表格IMPORTXMLQuery使用本地名稱獲取屬性
下一篇:轉換時的奇數時區偏移
