那些Excel中的脚本:读取当前脚本运行环境信息

由于新型Office Add-in的特点,它用Javascript/HTML/CSS等网页开发技术编写,可以在桌面客户端,浏览器,甚至移动应用中使用。这可以带来生产力的提升,并且有助于产品的商业化。

那么问题也就来了,有没有可能只编写一份代码,但是在不同环境运行的时候,执行不同的逻辑呢?这就需要在代码中能读取当前脚本运行环境。.

代码其实也很简单,Office JS SDK提供了一个函数可以用来读取相关的信息。请参考如下简单的代码

$("#run").click(() => tryCatch(run));
async function run() {  Office.onReady(async (info)=>{    await Excel.run(async (context) => {      const sheet = context.workbook.worksheets.getActiveWorksheet();      sheet.getRange("A1:B2").values=[        ["应用程序",info.host],        ["平台",info.platform]      ];      await context.sync();    });  })}
/** Default helper for invoking an action and handling errors. */async function tryCatch(callback) {  try {    await callback();  } catch (error) {    // Note: In a production add-in, you'd want to notify the user through your add-in's UI.    console.error(error);  }}

如果在桌面版运行,则结果如下

那些Excel中的脚本:读取当前脚本运行环境信息

同样的代码,在浏览器版本运行,则结果如下

那些Excel中的脚本:读取当前脚本运行环境信息

如果你只是为了判断当前脚本是否在某个客户端中运行,也可以用如下的代码实现:

  if(Office.context.requirements.isSetSupported("ExcelApi")){    console.log("你在Excel中运行");  }

有点意思,那么是否还能检测Office的版本呢?严格意义上说,不行。能否检测当前Windows版本呢?你想太多了吧。当然,这都是出于安全隐私方面的考虑。

其实我们要检测Office版本,很可能是因为想确定某些功能是否被支持。除此之外,似乎就算你拿到版本号又有什么用呢?为了检测某些功能是否被支持,Office Add-in有更好的办法。

请参考 https://docs.microsoft.com/en-us/javascript/api/requirement-sets?view=excel-js-preview 这里的说明,针对不同的版本(平台),Office JS SDK能支持的功能也不同,它通过所谓的requirementset来定义。其实上面已经用到了。但我们可以进一步扩展一下。

  if(Office.context.requirements.isSetSupported("ExcelApi","1.7")){    console.log("你在Excel中运行, 并且支持1.7版本的功能");  }