编辑:在问题结束时添加了简化的场景和重现步骤。请注意,目标是在 Excel-Desktop 上包含外部脚本,而不是通过其他方式使简化的场景工作。
我们都知道并喜欢自定义函数的股票价格示例,其中使用“获取”从源请求最新的股票价格:
如果有一个外部 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 桌面?
要重现该问题:
按照教程创建基本的自定义函数项目(使用 typescript 选项)并确保它们工作(https://docs.microsoft.com/en-us/office/dev/add-ins/tutorials/excel-tutorial-创建自定义功能?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”。
如何解释差异?