¿Es posible detectar si Microsoft Excel está instalado desde una aplicación web?

Estoy trabajando en una aplicación web (ASP.NET) que tiene algunas características que requieren que Microsoft Excel esté instalado en el cliente. Me gustaría desactivar esas características si Excel no está presente.

Las soluciones solo para Windows / IE / Excel están bien. Esta no es una aplicación web multi-browser, multi-OS.

¿Algún JavaScript inteligente para lograr esto?

No.

No puedes sumergirte en la máquina cliente lo suficientemente profundo como para descubrir esa parte. Lo mejor que puede hacer es asumir que está instalado y reflexionar sobre lo que sucederá si no es así o simplemente preguntarle al usuario.

Puedes hacer algo como esto, pero recibirás todo tipo de advertencias de security:

<script> var excelInstalled; try { var excel = new ActiveXObject("Excel.Application"); excelInstalled = true; } catch(e) { excelInstalled = false; } alert("excelInstalled: " + excelInstalled); </script> 

Por qué Excel? ¿Qué sucede si tengo OpenOffice.org en su lugar?

Solo advierta al usuario de lo que va a enviar, marque el enlace con "file Excel" y déjelo decidir.

 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; } 

He probado lo anterior con Office 11 (2003) y Office 12 (2007), y parece funcionar bien en Firefox, Safari, Chrome y Opera. Aunque no funciona en IE, porque los objects navigator.mimeTypes en IE siempre están vacíos.

Está comprobando la existencia de un plugin de MS Office. No sé mucho sobre este complemento, posiblemente no siempre esté instalado en la oficina … Pero creo que, si lo anterior es cierto, es una señal muy fuerte de que Excel está instalado. Por supuesto, es probablemente de uso limitado, ya que no funciona en IE, pero tal vez puedas hacer algo con eso …

no puede acceder a la información del cliente fuera del context del browser web, utilizando tecnologías estándar. pero veo que una de las respuestas es usar algún object ActivX para detectar Excel. de todos modos, este tipo de tecnologías solo funcionan en Internet Explorer en Windows. ¿Qué hay de Mac? ¿Qué pasa con otros browseres como Opera o Firefox o Chrome en Windows? Creo que es mejor dejar que el usuario le informe sobre esto. solo pregúntale al usuario si tiene Excel instalado o no:

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

Esta es una mala idea al comienzo. Lo que sea que intentes hacer, reconsidera.

Si aún insistes:

Intente crear ActiveXObject para Excel y luego para OpenOffice. Si falla, networkingirija a NoExcel.html o envíe XMLRequest al server.
Además, puede intentar averiguar a través de JavaScritp si hay un manejador de extensión de file XLS. Y por último, puede instalar su ActiveX que verifica si Excel está instalado.

Esto es para Windows. No hay idea para Mac, Linux, dispositivos mobilees … Puede apostar a que de cualquier forma que lo haga funcionar dejará de funcionar con la próxima revisión.