0

- 编码新手,通过编写基本功能来减少手动复制/粘贴的数量,从而减慢了我的学习速度。

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)
  })
  
}
4

0 回答 0