我- 编码新手,通过编写基本功能来减少手动复制/粘贴的数量,从而减慢了我的学习速度。
ISSUE - 我/我的队友经常做的一件事是使用索引/匹配(或 vlookup)来填充名册以上传到不同的 CRM,或在上传后进行分析。这可能既乏味又耗时,而且容易出错,我想知道如何尽可能地自动化。使用 GSheets 中的记录宏功能,我已经能够拼凑出一些可行的东西(包含的代码),但它并不是真正“干净”的代码,也不容易移植到另一个工作表中。
所需的解决方案- 我非常欣赏的是一种框架结构,它可以根据唯一的 ID 从一个或多个选项卡中将一条或多条信息拉到一个位置。本质上是从函数运行的可扩展索引/匹配。如果它也可以跨工作簿工作,那将比伟大更好。
谢谢你!!
function importCCAinformation (){
var spreadsheet = SpreadsheetApp.getActive();
var ccaOnboardings = SpreadsheetApp.openByUrl('sheet URL') //source workbook
var ccaSummary = SpreadsheetApp.getActive();
var coreTracker = ccaOnboardings.getSheetByName('Core-->Full Tracker') //source sheet
var engList = ccaOnboardings.getSheetByName('Eng List') //source sheet
coreTracker.copyTo(ccaSummary)
engList.copyTo(ccaSummary)
spreadsheet.getActiveSheet();
spreadsheet.getRange('F2:F').activate();
spreadsheet.getActiveRangeList().clearContent();
spreadsheet.getRange('F2').activate();
spreadsheet.getCurrentCell().setFormula('=index(\'Copy of Core-->Full Tracker\'!I:I,match(A2,\'Copy of Core-->Full Tracker\'!D:D,0))');
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('F2:F'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
spreadsheet.getRange('F2').activate();
spreadsheet.getRange('F2:F').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
var range = spreadsheet.getDataRange();
var removeNA = range.createTextFinder('#N/A');
removeNA.replaceAllWith('');
spreadsheet.getRange('F1').activate();
spreadsheet.getActiveSheet().getFilter().sort(6, true);
var coreMemberStatus = spreadsheet.getRange('F2:F').getValues();
var lastRowCoreTracker = coreMemberStatus.filter(String).length;
var firstRowEngList = [lastRowCoreTracker+2]
spreadsheet.getRange('F'+firstRowEngList).activate();
spreadsheet.getCurrentCell().setFormula('=index(\'Copy of Eng List\'!F:F,match(A'+firstRowEngList+',\'Copy of Eng List\'!A:A,0))');
spreadsheet.getActiveRange().autoFill(spreadsheet.getRange('F'+firstRowEngList+':F'), SpreadsheetApp.AutoFillSeries.DEFAULT_SERIES);
spreadsheet.getSelection().getNextDataRange(SpreadsheetApp.Direction.DOWN).activate();
spreadsheet.getRange('F'+firstRowEngList).activate();
spreadsheet.getRange('F'+firstRowEngList+':F').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_VALUES, false);
var range = spreadsheet.getDataRange();
var removeNA = range.createTextFinder('#N/A');
removeNA.replaceAllWith('');
spreadsheet.getRange('A1').activate();
spreadsheet.getActiveSheet().getFilter().sort(1, true);
const sheetNamesToDelete = ["Copy of Core-->Full Tracker","Copy of Eng List"]
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheets = ss.getSheets();
const sheetsToDelete = sheets.filter(sheet => sheetNamesToDelete.includes(sheet.getSheetName()))
sheetsToDelete.forEach(sheet =>{
ss.deleteSheet(sheet)
})
}