【发布时间】:2019-07-14 22:54:27
【问题描述】:
编辑:在问题末尾添加了简化的场景和重现步骤。请注意,我们的目标是在 Excel-Desktop 上包含 external 脚本,而不是通过其他方式让简化的场景工作。
我们都知道并喜欢自定义函数的股票价格示例,其中使用“获取”从源请求最新的股票价格:
如果有一个外部 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 文件中包含这样的引用,在 AllFormFactors/ExtensionPoint 下的清单中为“xsi:type=CustomFunctions”包含脚本 URL,在“Resources/bt”下添加了脚本引用:Urls' 及其各种组合,但自定义函数本身似乎并不“知道”脚本(索引 html 文件在加载到浏览器时知道脚本,所以我知道引用是正确的)。我所尝试的都是猜测,因为我没有找到任何关于使用外部 API 的文档。我正试图让它在 Windows 桌面(64 位)上适用于 Excel。
可以吗?
编辑/更新:只需在示例项目的“index.html”文件中包含外部脚本,即可确认它对 Excel Online 工作正常。这适用于 Excel 桌面吗?
重现问题:
按照教程创建基本的自定义函数项目(使用 typescript 选项)并确保它们正常工作 (https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-create-custom-functions?tabs=excel-windows)
-
创建一个 javascript 文件“globalapi.js”并将其放入“dist/win32/ship”文件夹(包含自定义函数 javascript 的同一文件夹)。只需在“globalapi.js”文件中声明一个全局变量,如下所示:
var someGlobalString = 'This is a global string'; -
在“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> -
修改“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”。
如何解释差异?
【问题讨论】:
-
在 VBA 中,是的,你可以调用 Web API,这就是你要问的吗?
-
正在阅读您的链接...有趣。从来没有冒险走这条路。
-
谢谢。这次我只对 JavaScript Office 插件感兴趣。
标签: javascript excel office-js custom-functions-excel