能否从Web应用程序中检测是否安装了Microsoft Excel?

3

我正在开发一个需要在客户端安装Microsoft Excel的Web应用程序(ASP.NET),其中一些功能需要使用Excel。如果没有Excel,我想禁用这些功能。

Windows / IE / Excel的解决方案是可行的。这不是一个多浏览器,多操作系统的Web应用程序。

是否有任何聪明的JavaScript可以实现这一点?


真糟糕,我正在度假,没有电脑可以使用。在工作中,我有一些JavaScript代码,可以告诉你是否安装了Excel(当然只适用于IE),以及许多其他应用程序。你能等到1月5日吗?;-) - scunliffe
我很想看看你有什么,请在回来后发布它。 - subjective-c
6个回答

6

不行。

您无法深入客户端机器,以便找出该部分。您能做的最好的事情就是要么假设它已经安装,并且认真考虑如果没有安装会发生什么,要么直接询问用户。


3
你可以像这样做,但是你会收到各种安全警告:
<script>
var excelInstalled;
try 
{
    var excel = new ActiveXObject("Excel.Application");
    excelInstalled = true;
}
catch(e)
{
    excelInstalled = false;
}
alert("excelInstalled: " + excelInstalled);
</script>

谢谢。我会尝试一下,我对安全警告很好奇。 - subjective-c

1
为什么要用Excel?如果我有OpenOffice.org呢?
只需警告用户您将发送给他们什么,使用“Excel文件”标记链接,让他自己决定。

如果您安装了OpenOffice.org,您将不会使用此Web应用程序。我将编辑问题以更好地反映仅限于Windows / IE / Excel的要求。 - subjective-c

1
function hasOfficePlugin() {
var toCheckExt = ['', '12', '13', '14', '15'], i, n, mt;
    for (i = 0, n = toCheckExt.length; i < n; i++) {
        mt = navigator.mimeTypes['application/x-msoffice' + toCheckExt[i]];
        if (mt && mt.enabledPlugin && mt.enabledPlugin.name) {
            return true;
        }
    }
    return false;
}

我已经在Office 11(2003)和Office 12(2007)上进行了测试,并且在Firefox,Safari,Chrome和Opera中运行良好。但是它在IE中不起作用,因为IE中的navigator.mimeTypes对象始终为空。

它正在检查MS Office插件的存在。我对这个插件不太了解 - 很可能它并不总是与office一起安装...但是我认为,如果以上返回true,则表明Excel已安装,这是一个相当强的信号。当然,由于它在IE中不起作用,所以可能有限,但也许您可以利用它做些什么...


0

使用标准技术,您无法在 Web 浏览器上下文之外访问客户端信息。但我看到有一个答案使用了一些 ActivX 对象来检测 Excel。不管怎样,这些技术只适用于 Windows 上的 Internet Explorer。那么 Mac 呢?Windows 上的其他浏览器如 Opera、Firefox 或 Chrome 呢?我认为最好让用户告诉您这个信息。只需询问用户是否已安装 Excel:

var isExcel = window.confirm('dear user if you have Microsoft Excel installed please click on ok, otherwise click on cancel. thank you.');

0

这是一个不好的想法。无论你试图做什么,都要重新考虑一下。

如果你还是坚持:

尝试为Excel和OpenOffice创建ActiveXObject。如果失败了,请重定向到NoExcel.html或向服务器发送XMLRequest。
此外,您可以尝试通过JavaScript查找是否有XLS文件扩展名处理程序。 最后,您可以安装自己的ActiveX,检查是否安装了Excel。

这是针对Windows的。对于Mac、Linux、移动设备等没有想法... 你可以打赌,任何让它运作的方式都会在下一个热修补之后停止工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接