如何根据一张 header 合并两张纸的数据

How to combine data from 2 sheets based on one header

如果这是数据库

这是从其他系统导出的数据

创建此代码与员工姓名和职位相匹配的报告的最短方法是什么?

真实的数据库很大,每个月手动处理需要几天时间。

我尝试过的东西

  1. 数据透视表。问题是它不从多个 sheets
  2. 中获取数据
  3. 将员工姓名与他在系统上的代码 [Name1 - a123] 结合起来。问题是系统不接受员工姓名中的数字
  4. Google 了解合并表格的方法。找不到解决我的具体挑战的资源。

示例 sheet:https://docs.google.com/spreadsheets/d/1rpd8hVGPOPwFWCIOX6LzyhvvcacufBEkjj-927VajgY/

在报告的 G1 sheet 我输入了

=INDEX(IFERROR({VLOOKUP('System Export'!A1:A, {Database!C1:C, Database!A1:C}, {2, 3, 4}, 0), 'System Export'!B1:C}))

看看这对你有用吗?

Google Apps 脚本:

/**
* Merges the contents of the Database and System Export sheets into the Report sheet.
* 
* @customfunction
*/
function mergeSheets() {
  // Get the spreadsheet
  let spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  
  // Get the sheets you want to work with
  let database  = spreadsheet.getSheetByName('Database');
  let system    = spreadsheet.getSheetByName('System Export');
  if ((database || system) === null)
    throw new Error("1 or more requested sheets don't exist.");
  
  // Get sheet values
  let databaseValues = database.getRange('$A:$C')
    .getValues();
  let systemValues = system.getRange('$A:$C')
    .getValues();
  if ((databaseValues.length || systemValues.length) < 1)
    throw new Error('1 or more requested sheets are blank.');
  
  // Merge values
  let reportValues = [];
  for (let i in databaseValues)
    for (let j in systemValues)
      if (databaseValues[i][2] == systemValues[j][0])
        reportValues.push([
          databaseValues[i][0],
          databaseValues[i][1],
          databaseValues[i][2],
          systemValues[j][1],
          systemValues[j][2]
        ]);
  
  return reportValues;
}

您可以将其粘贴到 Google 表格中的 built-in 脚本编辑器中。在报表 sheet 的 top-left (non-header) 单元格内使用公式 =mergeSheets() 瞧!