如何使用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
相关产品推荐
相关产品推荐

