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

如何从任务窗格向新建邮件传递数据?

解决方案

直接解决方法说明

目前Office JavaScript API没有提供直接机制,能让任务窗格的数据直接传递到新邮件的OnNewMessageCompose事件上下文——因为任务窗格和新邮件编辑器属于隔离的运行环境,无法直接共享内存数据。

最佳替代方案

通过唯一标识符关联临时存储数据与新邮件自定义属性的方式解决,具体步骤如下:

1. 生成唯一关联ID

在调用displayNewMessageFormAsync()前,生成一个全局唯一的UUID(避免多次快速调用时数据混淆)。示例代码:

function generateUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
  });
}

2. 临时存储任务窗格数据

将UUID作为键,任务窗格的数据作为值,存储到sessionStorage(仅当前会话有效,适合临时数据)或Office.context.roamingSettings(跨设备同步)中。示例:

const taskPaneData = { /* 你的任务窗格数据对象 */ };
const dataId = generateUUID();

// 使用sessionStorage存储
sessionStorage.setItem(`TaskPaneData_${dataId}`, JSON.stringify(taskPaneData));

// 或使用Office自定义设置(需调用saveAsync持久化)
Office.context.roamingSettings.set(`TaskPaneData_${dataId}`, taskPaneData);
Office.context.roamingSettings.saveAsync();

3. 创建新邮件时添加自定义属性

调用displayNewMessageFormAsync()时,通过options.itemProperties参数给新邮件添加自定义属性,将UUID存入其中:

Office.context.mailbox.displayNewMessageFormAsync(
  {
    itemProperties: {
      // 添加自定义属性,键名可自定义,比如TaskPaneDataId
      TaskPaneDataId: dataId
    }
  },
  function(asyncResult) {
    if (asyncResult.status === Office.AsyncResultStatus.Failed) {
      // 处理创建失败的情况,同时清理临时存储的数据
      sessionStorage.removeItem(`TaskPaneData_${dataId}`);
      Office.context.roamingSettings.remove(`TaskPaneData_${dataId}`);
      Office.context.roamingSettings.saveAsync();
    }
  }
);

4. 在OnNewMessageCompose事件中获取数据

在新邮件的OnNewMessageCompose事件回调里,先读取邮件的自定义属性拿到UUID,再从临时存储中取出对应数据:

Office.actions.associate('OnNewMessageCompose', function(event) {
  Office.context.mailbox.item.loadCustomPropertiesAsync(function(asyncResult) {
    const customProps = asyncResult.value;
    const dataId = customProps.get('TaskPaneDataId');
    
    if (dataId) {
      // 从sessionStorage读取数据
      const storedDataStr = sessionStorage.getItem(`TaskPaneData_${dataId}`);
      const taskPaneData = JSON.parse(storedDataStr);
      
      // 或从Office自定义设置读取
      // const taskPaneData = Office.context.roamingSettings.get(`TaskPaneData_${dataId}`);
      
      // 这里处理你的数据逻辑
      console.log('获取到任务窗格数据:', taskPaneData);
      
      // 处理完成后建议清理临时存储,避免冗余
      sessionStorage.removeItem(`TaskPaneData_${dataId}`);
      Office.context.roamingSettings.remove(`TaskPaneData_${dataId}`);
      Office.context.roamingSettings.saveAsync();
    }
    
    event.completed();
  });
});

方案优势

  • 确保每封新邮件对应唯一的任务窗格数据,不会因多次快速调用混淆
  • 临时数据可选择会话级存储(sessionStorage),自动随浏览器会话结束清除,无残留
  • 利用邮件自定义属性传递关联ID,符合Office JS的规范,兼容性好

内容的提问来源于stack exchange,提问作者John Evans Solachuk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 07:03:21