Visual Studio开发Excel Web Add-in如何实现用户设置持久化存储
可行存储方案及问题排查
一、Office.Settings 失效排查
你遇到的重启后读取为null的问题,大概率是这几个原因:
- 调用
saveAsync时没有处理回调确认保存结果,实际保存可能触发了权限错误/上下文异常没有被捕获,正确的保存写法参考:
Office.context.document.settings.set('mySetting', 'testValue'); Office.context.document.settings.saveAsync(function (asyncResult) { if (asyncResult.status === Office.AsyncResultStatus.Failed) { console.log('保存失败: ' + asyncResult.error.message); } else { console.log('保存成功'); } });
- 注意Office.Settings是绑定到当前打开的Excel文档的,不是全局的加载项配置,你如果换了个文档打开加载项,就读不到之前另一个文档存的设置,这是官方设计特性。
- 加载项初始化时要等待Office初始化完成再调用读取接口,不要在
Office.onReady()触发前执行读取逻辑。
二、其他可用存储方案
如果需要全局的、跨文档的用户配置存储,可以选以下方案:
1. 浏览器LocalStorage/SessionStorage
Web加载项本质是运行在嵌入式浏览器容器里,直接用前端原生存储就行:
- 存数据:
localStorage.setItem('userID', 'xxx') - 读数据:
localStorage.getItem('userID') - 特点:实现简单,是用户设备本地存储,除非用户清理浏览器缓存/加载项缓存,数据会一直存在,适合存非敏感的用户配置。
2. 加载项后端存储
如果要存敏感信息,或者需要跨设备同步用户设置,就把用户登录后的信息存在你的服务端,用户登录时从服务端拉取对应配置就行,这种方式安全性最高,不受本地缓存清理影响。
3. Office roamingSettings 接口
如果要实现同个微软账号下跨设备、跨文档的加载项配置持久化,可以用Office.context.roamingSettings接口,用法和Office.Settings完全一致,区别是这个配置是绑定到用户的Office账号,不是绑定到单个文档,只要用户用同一个账号登录Office,不管在哪台设备、打开哪个文档,都能读到存的配置。
注意roamingSettings有单加载项存储上限100KB的限制,适合存用户ID、偏好设置这类小体积数据。
内容的提问来源于stack exchange,提问作者AnkRaw
相关产品推荐
相关产品推荐

