为什么我的自定义 Excel 函数从不仅在 Windows 上返回值?



我正在使用Microsoft提供的 Web 加载项框架构建 Office Excel 加载项。 此加载项还包括一个自定义函数。目前,自定义函数适用于Excel for Mac、Excel 在线(与设备无关),但不适用于 Windows?

加载项加载正常,并且没有明显的错误。但是当函数运行时(在Windows上),它只是说:#BUSY,然后决心#VALUE!并保持这种状态。

该代码在使用Shared Runtime配置时也可以工作,但这需要我们使所有 Javascript 都与 IE 兼容,这绝对是一种可能性 - 但我想知道为什么常规配置不起作用。

WISE是Excel函数。

function WISE(symbol, parameter, year, quarter) {
var param = parameter.replace(/s/g, '').toLowerCase();
param = param.replace('&', 'and');
symbol = symbol.toUpperCase();
if (quarter == null) {
return getAnnualData(symbol, param, year);
} 
}
function getVal(data, param) {
var apiResponseDataFormatted = {};
for (var key in data) {
apiResponseDataFormatted[key.replace(/ /g, '').toLowerCase()] = data[key];
}
var newValue = apiResponseDataFormatted[param];
if (newValue !== 0 && !newValue) {
newValue = 'Unavailable';
}
return newValue;
}
function getAnnualData(symbol, parameter, year) {
var apiPath = requestMap[parameter];
var response = "";
var url = URL_API + "/" + apiPath + "/" + symbol + "?apikey=" + api_key;
var request = new XMLHttpRequest();
request.open('GET', url, false);  // `false` makes the request synchronous
request.send(null);
if (request.status === 200) {// That's HTTP for 'ok'
response = JSON.parse(request.responseText);
}else{
return "Request Error: " + request.status + " " + url;
}
var apiResponseData;
var currentYear = new Date().getFullYear();
if (year != null && year !== currentYear) {
apiResponseData = response[currentYear - year - 1];
} else {
apiResponseData = response[0];
}
result = getVal(apiResponseData, parameter)
return result;
}

很抱歉感到沮丧。造成这种情况的主要原因之一可能是目前在Windows上的自定义函数在自己的运行时中运行,这是一个单独的。虽然该运行时可以节省内存,但其中一个限制是它不支持完整 CORS。

我们一直建议使用共享运行时来解决此问题。这将有效地在与任务窗格相同的运行时运行自定义函数,因此我怀疑这将适合您。这也使得在任务窗格和函数之间共享状态变得容易。

你能试试吗?

https://learn.microsoft.com/en-us/office/dev/add-ins/tutorials/share-data-and-events-between-custom-functions-and-the-task-pane-tutorial

(我意识到文档对此不是很清楚,因此将离线跟进以更正它)。

相关内容

最新更新