c# - funciones - La búsqueda de la información personalizada sobre herramientas de Excel
herramientas de excel y sus funciones (3)
Esta pregunta se ha asked before , pero cada vez que la respuesta aceptada es simplemente una renuncia para proporcionar descripciones de funciones utilizando Application.MacroOptions
( VBA6 ) ( VBA7 ), esta información en realidad no aparece como información sobre herramientas, por lo que no resuelve mi problema .
La meta
Lo que todos deseamos es poder definir funciones personalizadas por cualquier medio (complemento VBA, VSTO o COM) y brindar al usuario el beneficio de una descripción emergente / descripción de herramienta de la función y sus parámetros, como aparece para cada función incorporada de Excel, ya sea en línea o en la barra de fórmulas:
La respuesta ampliamente aceptada a esta necesidad es que no es posible para las funciones personalizadas, pero deseo desafiar esa creencia.
El problema
Actualmente, lo mejor que he visto hacer es definir funciones (a menudo usando la llamada MacroOptions anterior) para que al abrir el cuadro de diálogo de funciones (el botón fx en la barra de fórmulas) sus funciones y descripciones de parámetros aparezcan de la siguiente manera:
Como puede ver, esta es una función complicada con muchos parámetros. Si el usuario no está enterado de este diálogo de "argumentos de función" y cómo hacerlo aparecer, y en su lugar solo está familiarizado con la información sobre herramientas estándar de Excel, solo verán el nombre de la fórmula y no recibirán ayuda adicional:
Con lo cual no tienen posibilidad de proporcionar correctamente los parámetros requeridos. (Sin leer la documentación, que por supuesto, ningún usuario lo hace).
Ahora, un usuario avanzado podría saber que al presionar Ctrl + Shift + A , se le otorgará una lista de parámetros de función completada automáticamente así:
Pero, por supuesto, tenemos el mismo problema que el anterior, que es que los usuarios estándar de Excel solo se utilizarán para el comportamiento predeterminado de la primera imagen y probablemente nunca hayan aprendido esa función.
Debería quedar claro en este punto por qué esto no es suficiente y queremos que cada función incorporada tenga: la herramienta en línea que le dice al usuario cómo usar la función.
La burla
Al principio, podría haber estado convencido de que esto simplemente no es posible, excepto con las funciones nativas de la aplicación de Excel. Los complementos y VBA son funciones de extensibilidad, y esta información sobre herramientas puede simplemente no ser extensible. Pero esa teoría se ve desafiada por la existencia del complemento Analysis Toolpak. Claro, está construido en Microsoft, pero ANALYS32.xll es un complemento XLL independiente al igual que los que se pueden producir en VB, C, C ++ y C #. Efectivamente, cuando este XLL se carga en la aplicación, las functions que pone a disposición tienen los mismos consejos de herramientas de las funciones nativas de Excel:
Sin duda, si esta información se codifica de alguna manera en este archivo XLL y se pasa a Excel, ¿hay alguna manera de replicarlo con nuestros propios complementos? Ahora estoy en el punto en el que voy a comenzar a enseñarme un poco sobre la descompilación y ver si puedo aplicar ingeniería inversa a todo lo que esté sucediendo en el paquete de herramientas de análisis.
Cómo puedes ayudar
Estoy casi seguro de haber investigado toda la información pública disponible sobre este problema. Sin embargo, si alguien sabe algo que no sé que pueda ayudar con esto, siéntete libre de avisarme. No estoy familiarizado con los dlls / xlls compilados de ingeniería inversa, así que si alguien tiene ganas de abrir su copia local de Analysis32.xll y averiguar qué está pasando con sus definiciones de funciones personalizadas, estaría muy agradecido. De lo contrario, seguiré ahondando en esto hasta que llegue a todos los callejones sin salida y le informe lo que encuentre.
¿Qué es XLL?
Un XLL es un archivo DLL que exporta varios procedimientos que son llamados por Excel o el Administrador de complementos de Excel. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx
¿Cómo desarrollas el XLL?
SDK de Excel XLL con Visual C ++ (o cualquier cosa que pueda compilar una DLL y llamar a los procedimientos de SDK)
¿Dónde puedo encontrar una guía rápida para crear un XLL simple?
¿Cómo recibo la información sobre herramientas?
- Implemente su función como un procedimiento y expórtela
- Implemente y exporte el procedimiento xlAutoOpen (void) - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
- xlAutoOpen solo necesita llamar a xlfRegister - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
- Para información sobre herramientas, atención especial para:
pxArgumentText, pxFunctionHelp, pxArgumentHelp1
Lamentablemente, el complemento Analysis Toolpak tampoco tiene información sobre herramientas.
Mi solución fue incorrecta, pero con información incorrecta publicada por el póster original. Mostrando una imagen con BINOMDIST, si su functions muestra claramente que esto no es una función de ANALYS32.xll.
Esto significa que estaba tratando de resolver una pregunta imposible. Porque no hay XLL que pueda hacer lo que solicitó el afiche. Si encuentra una versión de Excel que muestra información sobre herramientas de XLL, por favor avíseme.
Sobre lo que preguntó el cartel, tratando de imitar el comportamiento de XLL, estoy seguro de que mi respuesta fue la más correcta en relación con lo que ANALYS32.xll hace.
He publicado un proyecto de prueba de concepto para GitHub como el proyecto Excel-DNA IntelliSense , implementando esto.
Al usar las clases de automatización de la interfaz de usuario para supervisar los eventos apropiados de la interfaz de usuario de Excel, se muestra un formulario cuando corresponde.
El código está envuelto como un complemento Excel-DNA y funciona en mi máquina Excel 2013 / Windows 8. Probé en otra configuración (Excel 2010 de 64 bits en Windows Server 2008) y tuve problemas serios.
Para una función C # definida con los atributos Excel-DNA como este:
[ExcelFunction(Description =
"A useful test function that adds two numbers, and returns the sum.")]
public static double AddThem(
[ExcelArgument(Name = "Augend",
Description = "is the first number, to which will be added")]
double v1,
[ExcelArgument(Name = "Addend",
Description = "is the second number that will be added")]
double v2)
{
return v1 + v2;
}
obtenemos la descripción de la función
y al seleccionar la función, obtenemos ayuda argumento
Eso se ve bien, pero todo sigue siendo escamoso, solo funciona en mi máquina y algunas veces falla Excel. Aunque podría ser un comienzo ...
Actualización 9 de mayo de 2014:
Hice algunos progresos descubriendo cómo hacer que el argumento ayude a trabajar con versiones anteriores de Excel y Windows. Sin embargo, todavía necesita bastante trabajo para que todo sea confiable. Cualquier persona que desee ayudar con esto, por favor contácteme directamente.
Actualización 18 de junio de 2016:
El soporte de Excel UDF IntelliSense para los complementos de Excel-DNA y las funciones de VBA ahora se está probando. Consulte la página de Introducción en GitHub para obtener instrucciones.
Qué tal si
- Capture ingresando texto en el evento presionar tecla de la celda. Me gusta esto
- Verifique si el texto coincide con las funciones personalizadas.
- Si coincide, muestra algo así como etiqueta o forma para pretender ser una información sobre herramientas. Me gusta esto
¿Es esto aceptable?
Es un poco feo pero más fácil.