您如何在Excel自定义函数中使用外部JavaScript?

时间:2019-02-21 05:50:19

标签: javascript excel office-js custom-functions-excel

编辑:添加了简化的场景和在问题末尾重现的步骤。请注意,这样做的目的是在Excel-Desktop上包含 external 脚本,而不是通过其他方法使简化方案起作用。


我们都知道并喜欢自定义功能的股票价格示例,该示例使用'fetch'从来源请求最新的股票价格:

https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows#create-a-custom-function-that-requests-data-from-the-web

如果有用于获取股票价格的外部API,是否还可以使用?像这样:

                   Stock Price Source
                           |  <----------- API knows how to get the stock price
           External Stock Price API Javascript Library
                           |  <----------- javascript function calls here
                    customfunctions.js
                           |
                         Excel

或者换句话说,自定义功能JavaScript项目是否可以包含外部脚本,如

<script type="text/javascript" src="https://example.com/stock-price-api.js />

我试图在自定义函数项目的索引html文件中包含这样的引用,在清单脚本的URL中将脚本URL包含在“ xsi:type = CustomFunctions”的AllFormFactors / ExtensionPoint下,并在“资源/ bt”下添加了脚本引用:Urls”及其各种组合,但是脚本似乎不是自定义功能本身的“已知”脚本(将html索引文件加载到浏览器后就知道了该脚本,因此我知道引用是正确的)。我尝试的所有工作都是猜测,因为我没有找到任何有关使用外部API的文档。我正在尝试使其在Windows桌面(64位)上适用于Excel。

能做到吗?


编辑/更新:仅通过将外部脚本包含在示例项目的“ index.html”文件中,即可确认它对于Excel Online可以正常工作。是否打算用于Excel Desktop?


重现该问题:

  1. 按照本教程创建基本的自定义函数项目(使用typescript选项),并确保它们可以正常工作(https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows

  2. 创建一个javascript文件“ globalapi.js”,并将其放入“ dist / win32 / ship”文件夹(包含自定义函数javascript的同一文件夹)。只需在“ globalapi.js”文件中声明一个全局变量,如下所示:

    var someGlobalString = 'This is a global string';
    
  3. 在“ index.html”文件中包含“ globalapi.js”脚本;然后,其中包含的所有脚本都是:

    <script src="https://officedev.github.io/custom-functions/lib/custom-functions-runtime.js" type="text/javascript"></script>
    <script src="dist/win32/ship/globalapi.js" type="text/javascript"></script>
    <script src="dist/win32/ship/index.win32.bundle" type="text/javascript"></script>
    
  4. 修改“ customfunctions.ts”文件中的“ add”功能,以便在定义“ someGlobalString”时返回不同的内容:

    declare var someGlobalString: any;
    
    function add(first: number, second: number): number {
      if (typeof someGlobalString !== 'undefined') {
         return 99999;
      }
      return first + second;
    }
    

现在将自定义函数'= CONTOSO.ADD(1,2)'输入到Excel中的单元格中。对于Excel Desktop(以'npm run sideload'开头),单元格中显示的结果为'3';对于Excel Online(加载清单后),结果为'99999'。

如何解释差异?

1 个答案:

答案 0 :(得分:1)

抱歉,Windows build 16.0.11406.20002上带有Web请求的最新Windows build上现在有一个错误。

https://github.com/OfficeDev/Excel-Custom-Functions/issues/115

一旦下一个版本发布到“内部人员”频道,我们将立即更新该问题。

谢谢!

相关问题