标签: office-js

Office.js回调中断Angular Controller

我正在使用AngularJS处理PowerPoint-AddIn.要获取用户语言,我使用Office.context.displayLanguage,它仅在Office.initialize -Callback中可用.我通过Angular-Factory获得了我的语言字符串.当我将Office.initialize -Callback放入我的Angular Controller中时,它会破坏Controller-Functionality,并且我的页面上的按钮不再有效.我究竟做错了什么?

myApp.controller('angularHomeController', ['$scope', 'lang', function ($scope, lang) {
    $scope.lang = lang.getLocaleStrings("en-US");
    Office.initialize = function (reason) {
        $scope.lang = lang.getLocaleStrings(Office.context.displayLanguage);
    }
}]);
Run Code Online (Sandbox Code Playgroud)

我将语言默认设置为英语,但我希望在初始化文档时更改它并且我可以访问displayLanguage.我的应用程序工作正常,直到我将Office.initialize -Callback放在我的控制器内.我应该以某种方式注入Office对象吗?我没有收到任何错误消息.

powerpoint office-addins angularjs office-js

2
推荐指数
1
解决办法
639
查看次数

必须始终设置Office.initialize吗?

我有一个Office.js任务窗格加载项,在用户在任务窗格UI上执行特定操作之前,它不会对Office API执行任何操作.UI是angular.js SPA.所以,很自然地,我无需在Office.initilize上做任何事情.但是,我一直在运行以下错误,直到我给Office.initilize一个空函数.

SCRIPT5022:https:// localhost:44300/Scripts/Office/1/office.js中第 103 行第103行未处理的异常 0x800a139e - JavaScript运行时错误:Office.js尚未完全加载.请稍后重试或确保在Office.initialize函数中添加初始化代码.office.js(11,10360)

摆脱这个的代码是:

  <script type="text/javascript">
      Office.initialize = function (reason) {
          // Nothing to do here..
      }
  </script>
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?顺便说一句,错误不是立即的或响应任何API调用或用户交互.它似乎被Office.js文件中的setTimeout抛出了.

office365 office-js

2
推荐指数
1
解决办法
2666
查看次数

适用于Powerpoint加载项的API(Windows和Mac)

是否有用于为Office 2016 for Mac开发加载项的新API?我见过一个javascript API,但我还不清楚这是否适用于Office for Mac 2016,Office for Windows 2013+或Office Web Apps.请指出一份澄清该文件的官方文件.

macos vsto ms-office office365 office-js

2
推荐指数
1
解决办法
452
查看次数

在Office JavaScript API中用承诺(ctx.sync)编写循环的最佳方法

有许多讨论如何保证循环中promise的执行顺序的线程。我想知道Office加载项的JavaScript API的最佳实践是什么。在大多数情况下,所承诺的是ctx.sync()

这是一个片段,用于逐个打印Excel范围列表的地址。测试表明,它很好地遵守了Excel范围的顺序。但是问题是是否以及如何保证执行顺序?

function loadAll () {
   var ranges = ["A:A", "B:B", "C:C", "D:D", "E:E"];
   var sheet = "Sheet1";
   for (var i = 0; i < ranges.length; i++) {
       loadRange(ranges[i], sheet);        
   }
}

function loadRange (range, sheet) {
   Excel.run(function (ctx) { 
       var r = ctx.workbook.worksheets.getItem(sheet).getRange(range);
       r.load('address');
       return ctx.sync().then(function() {
          console.log(r.address);
       });
   });
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

javascript asynchronous ms-office promise office-js

2
推荐指数
1
解决办法
1342
查看次数

Office.context.ui.displayDialogAsync抛出5001内部错误

我正在使用Visual Studio项目模板创建一个新的Outlook Mail加载项,我在其中获取一个显示当前所选电子邮件属性的示例.

我添加了一个带有click事件处理程序的按钮,使用以下代码打开一个对话框:

  $('#clickMeButton').click(function () {
      Office.context.ui.displayDialogAsync('https://localhost/OutlookAddinTest/MessageDialog.html', {
          height: 40,
          width: 40,
          requireHTTPS: true
      }, function (result) {
          _dlg = result.value;
          _dlg.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogMessageReceived, dialogMessageReceived);
      });
  });
Run Code Online (Sandbox Code Playgroud)

我正在使用Chrome中的Outlook网络客户端进行调试: Chrome中调试会话的屏幕截图

我不知道它是否与此错误相关,但在我点击clickMeButton之前,我可以在加载网站后看到以下错误: 在此输入图像描述

osfruntime.js:13 Error while parsing the 'sandbox' attribute: 'ms-allow-popups' is an invalid sandbox flag.OSF.OsfControl._createIframeAndActivateOsfControl @ osfruntime.js:13
Run Code Online (Sandbox Code Playgroud)

displayDialogAsync(...)函数不应该用于Outlook Mail加载项吗?这可能是一个问题,因为它会在主Outlook html页面的上下文中加载另一个html页面.但它不能在Outlook桌面客户端中运行.

office-addins outlook-addin office-js

2
推荐指数
1
解决办法
636
查看次数

Word中的上下文菜单添加Ins

我正在为Microsoft Word开发一个Add In.我期待添加自定义上下文菜单.在Word文档中使用上下文菜单是否可行?

office-addins word-addins office-js

2
推荐指数
1
解决办法
779
查看次数

获取具有外接程序设置的自定义属性的事件

此问题是通过Microsoft Graph在Outlook加载项中获取自定义属性集的后续操作。

我的Outlook Office.js加载项正在向事件添加一些自定义属性。它可以按预期工作,我可以使用Microsoft Graph并按照以下GET请求访问这些属性:

/v1.0/me/events/{event-id}?$expand=SingleValueExtendedProperties($filter=id%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')
Run Code Online (Sandbox Code Playgroud)

但现在,我尝试通过将这样的正文发布到推送通知端点(/v1.0/subscriptions)来订阅推送通知:

  {
    changeType: "created,updated,deleted",
    notificationUrl: `[...my url...]`,
    resource: `/users/${userData.id}/events?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')`,
    expirationDateTime: tomorrow,
    clientState: "SecretClientState"
  }
Run Code Online (Sandbox Code Playgroud)

但我得到:

{
  "error": {
    "code": "ExtensionError",
    "message": "Operation: Create; Exception: [Status Code: BadRequest; Reason: Bad Request]",
    "innerError": {
      "request-id": "01dcece6-0103-4bef-8231-e9ab9480402a",
      "date": "2017-04-04T20:20:58"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

试图设置请求中的资源为不转义,但结果相同,接下来我尝试的是$filter功能,因此使用MS Graph资源管理器以以下格式获取了get请求:

/v1.0/me/events/?$filter=singleValueExtendedProperties/any(ep%3A%20ep%2Fid%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-b7ff386a-234a-4a38-84bc-e5ae4684b7af')
Run Code Online (Sandbox Code Playgroud)

但出现以下错误:

{
    "error": {
        "code": "ErrorInvalidUrlQueryFilter",
        "message": "The filter expression for $filter does not match to a single extended property and a value restriction.", …
Run Code Online (Sandbox Code Playgroud)

outlook-restapi office-js outlook-web-addins microsoft-graph

2
推荐指数
1
解决办法
699
查看次数

找不到名字'办公室'

我在Office.js中使用Angular 4.该项目由Angular CLI创建.

代码很简单:

// declare const Office: any;
// With the line above, the app runs perfect

Office.initialize = function () {
  platformBrowserDynamic().bootstrapModule(AppModule);
};
Run Code Online (Sandbox Code Playgroud)

我收到了错误

找不到名字'办公室'.

我已经做了 npm install --save-dev @types/office-js

我的tsconfig.json文件:

{
  "compileOnSave": false,
  "compilerOptions": {
    "outDir": "./dist/out-tsc",
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2016",
      "dom"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

更新1:

关注@MahmoodSajjadi建议,之后npm install --save @microsoft/office-js和使用

import { Office } from '@microsoft/office-js';
Run Code Online (Sandbox Code Playgroud)

得到此错误:

/my-app/src/main.ts中的错误(3,24):文件'/my-app/node_modules/@types/office-js/index.d.ts'不是模块. …

typescript office-js angular

2
推荐指数
1
解决办法
1705
查看次数

在Outlook邮件中发送邮件后,itemId发生了变化

在撰写模式下,我收到itemId邮件项目saveAsync

一旦邮件项目发送,项目Id进来的Office.context.mailbox.item.itemId是比什么是在撰写模式给予不同的。

用于进入itemId撰写模式的代码:

var itemId = Office.context.mailbox.item.itemId;
if (itemId === null || itemId == undefined) {
    Office.context.mailbox.item.saveAsync(function (result) {
        itemId = result.value;
    });
}
Run Code Online (Sandbox Code Playgroud)

发送电子邮件后,我使用以下方法验证itemId了“发件箱”中的电子邮件:

`Office.context.mailbox.item.itemId`
Run Code Online (Sandbox Code Playgroud)

令我惊讶的是,情况有所不同。

根据文档itemId应该相同:

itemId属性在撰写模式下不可用。如果需要商品标识符,则saveAsync可以使用该方法将商品保存到商店,这将AsyncResult.value在回调函数的参数中返回商品标识符。

我做错了什么?

office-js outlook-web-addins

2
推荐指数
1
解决办法
202
查看次数

如何在Angular2 Outlook加载项中使用Addin命令

如何将加载项命令与Angular Outlook加载项一起使用?

我们有一个Office.js加载项,并有一个Functions.html和一个Functions.js调用命令.我们已将URL添加functions.html到我们的Manifest文件中.

  • Functions.html:要Functions.js为支持加载项命令的客户端加载的空HTML文件.
  • Functions.js:单击加载项命令按钮时调用的代码.

任何人都可以建议使用Angular使用加载项命令吗?

office-js angular

2
推荐指数
1
解决办法
723
查看次数