You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Office Scripts在Excel多工作簿间执行VLOOKUP?

Office Scripts实现薪资导入方案

前提说明

根据你提供的表格截图(Job_Salary含员工姓名、薪资列;Deduction_Sheet含员工姓名,需填充对应薪资),以下是实现步骤和代码示例。

实现步骤

  • 确保两个工作簿都保存在OneDrive或SharePoint中(Office Scripts跨工作簿操作必须满足此条件)
  • 在Deduction_Sheet工作簿中创建新的Office Script
  • 编写脚本读取Job_Salary的员工薪资数据,匹配后填充到Deduction_Sheet对应位置

代码示例

async function main(workbook: ExcelScript.Workbook) {
  // 1. 替换为你的实际文件路径和工作表名
  const jobSalaryFilePath = "/Documents/Job_Salary.xlsx";
  const jobSalarySheetName = "Sheet1";
  const deductionSheetName = "Sheet1";

  // 2. 读取Job_Salary的薪资数据
  const jobSalaryWorkbook = await ExcelScript.Workbook.open(jobSalaryFilePath);
  const jobSalarySheet = jobSalaryWorkbook.getWorksheet(jobSalarySheetName);
  const salaryData = jobSalarySheet.getUsedRange().getValues();

  // 3. 构建员工-薪资映射表
  const salaryMap = new Map<string, number>();
  // 跳过表头,从第二行开始遍历
  for (let i = 1; i < salaryData.length; i++) {
    const employeeName = salaryData[i][0] as string;
    const salary = salaryData[i][1] as number;
    salaryMap.set(employeeName, salary);
  }

  // 4. 填充Deduction_Sheet的薪资列
  const deductionSheet = workbook.getWorksheet(deductionSheetName);
  const deductionValues = deductionSheet.getUsedRange().getValues();

  // 假设姓名在A列,薪资填充到B列,跳过表头
  for (let i = 1; i < deductionValues.length; i++) {
    const employeeName = deductionValues[i][0] as string;
    if (salaryMap.has(employeeName)) {
      deductionSheet.getCell(i, 1).setValue(salaryMap.get(employeeName));
    } else {
      deductionSheet.getCell(i, 1).setValue("无匹配薪资");
    }
  }

  // 保存修改
  await workbook.save();
}

关键注意事项

  • 路径与表名修改:务必根据你的实际文件位置和工作表名称替换代码中的对应参数
  • 列位置调整:如果员工姓名、薪资列不在A/B列,修改代码中对应的索引(比如姓名在C列就用salaryData[i][2])
  • 权限授权:首次运行脚本需要授权访问其他工作簿的权限

内容的提问来源于stack exchange,提问作者Kavinda_404

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:33:39