共享工作簿中如何获取运行Excel Online脚本的当前用户名称?
解决Excel Online脚本获取当前运行用户的问题
问题原因
你用properties.getLastAuthor()获取的是文档属性中存储的最后修改者,这个属性由服务器端同步更新,脚本运行过程中修改文档后,该属性不会实时刷新,所以你拿到的始终是脚本执行前的上一个用户。
可行解决方案
方法1:结合Power Automate传递当前用户信息
这是最直接可靠的方式,利用Power Automate获取当前用户身份,再传递给Excel脚本:
- 在Power Automate中创建新流,添加**Get my profile (V2)**动作,获取当前用户的名称、邮箱等信息。
- 添加Excel Online (Business)的Run script动作,选择目标工作簿和脚本。
- 在脚本参数配置中,将
Get my profile返回的Display name或User principal name作为参数传递给脚本。
对应的Excel脚本代码示例:
function main(workbook: ExcelScript.Workbook, currentUser: string) { // 直接使用传入的currentUser,即为运行脚本的用户 console.log("当前运行脚本的用户:", currentUser); // 你的原有脚本逻辑,比如数据更新操作 const properties = workbook.getProperties(); // ...其他业务代码 }
方法2:调用Microsoft Graph API(需额外权限配置)
如果工作簿属于Office 365群组,可通过Microsoft Graph的/me端点获取当前用户信息,但需要管理员配置脚本的网络调用权限,且要处理身份验证,步骤较繁琐:
async function main(workbook: ExcelScript.Workbook) { try { const response = await fetch("https://graph.microsoft.com/v1.0/me", { headers: { "Authorization": "Bearer " + await OfficeRuntime.auth.getAccessToken({ allowSignInPrompt: true }) } }); const userInfo = await response.json(); console.log("当前运行用户:", userInfo.displayName); } catch (error) { console.error("获取用户信息失败:", error); } }
注:该方法需要管理员在Excel管理中心配置允许脚本调用Graph API的权限,且首次运行需要用户授权。
总结
优先选择Power Automate方案,无需复杂权限配置,能直接准确获取运行脚本的用户身份。
内容的提问来源于stack exchange,提问作者madejuan
相关产品推荐
相关产品推荐

