0

编辑:在问题结束时添加了简化的场景和重现步骤。请注意,目标是在 Excel-Desktop 上包含外部脚本,而不是通过其他方式使简化的场景工作。


我们都知道并喜欢自定义函数的股票价格示例,其中使用“获取”从源请求最新的股票价格:

https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows#create-a-custom-function-that-从网络请求数据

如果有一个外部 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

或者换句话说,customfunctions JavaScript 项目是否可以包含外部脚本,例如

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

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

可以做到吗?


编辑/更新:只需在示例项目的“index.html”文件中包含外部脚本,即可确认它适用于 Excel Online。这是否适用于 Excel 桌面?


要重现该问题:

  1. 按照教程创建基本的自定义函数项目(使用 typescript 选项)并确保它们工作(https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-创建自定义功能?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;
    }
    

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

如何解释差异?

4

1 回答 1

1

抱歉,在 Windows 版本 16.0.11406.20002 上带有 Web 请求的最新 Windows 版本目前存在错误。

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

我们将在下一个版本发布到 Insiders 频道​​后立即更新该问题。

谢谢!

于 2019-02-22T23:20:12.550 回答