2010-09-03 169 views
31

Tengo que recorrer unas 25 hojas en excel para hacer operaciones. Lo estoy haciendo usando vba y encontrándolo realmente lento, por lo tanto, quería saber si podría usar C# y si lo hago eso me ayudaría a acelerar el proceso.¿Podemos escribir una macro en C# para Excel

+0

No creo que pueda usar C# directamente en una macro. Puede crear un complemento escrito en C# para trabajar con la hoja. Si se acelera, su proceso no puede ser respondido hasta que describa lo que está haciendo. – Khh

+0

@gizgok: hola, acepte mi respuesta – abatishchev

Respuesta

-1

¿Qué operaciones está haciendo exactamente? En primer lugar, no es necesario que escriba el código VBA usted mismo. Simplemente puede grabar una macro en un libro de trabajo y guardarla en C: \ Archivos de programa \ Microsoft Office \ Office12 \ Xlstart. Excel registrará una macro y la pondrá a disposición en todas las hojas que abra.

También puede ajustar el código VBA generado automáticamente en el proceso mencionado anteriormente para que se ajuste a sus necesidades.

Personalmente, no creo que escribir un complemento C# para hacer el trabajo acelerará la tarea. VBA es un lenguaje creado específicamente para trabajar con el Modelo de objetos de Office. Si eso no funciona lo suficientemente rápido, entonces ¿necesita ver qué operación está realizando?

Creo que crear un complemento de C# para manipular el Modelo de objetos de Excel y mantenerlo es demasiado para hacer. También implicará una gran curva de aprendizaje.

+1

Las macros creadas con la característica _record macro_ de Excel tienden a ser ** muy lentas ** porque emiten una tonelada innecesaria de comandos _activate_ y _select_. Puede ser útil registrar una macro breve para ver cómo se puede hacer algo, pero si la velocidad de ejecución es motivo de preocupación, debe volver a escribir la macro grabada. – riderBill

28

llamada C# libro de Excel VBA macro como - no se puede

Acceso libro de Excel de aplicación C# - se puede. Esto se llama Herramientas de Microsoft Visual Studio para Office (VSTO)

+40

Hable como Yoda - usted lo hace –

+0

Esta debería ser la respuesta aceptada – Arijoon

+0

No estoy de acuerdo. Puede llamar a un servicio web (C#) a través de una macro. Creo que lo mismo se aplica a los puntos finales tranquilos escritos en webapi ... – cs0815

7

Aunque es posible que pueda escribir un equivalente en C# en su macro de VBA actual utilizando VSTO, dudo mucho si esto representaría una diferencia significativa en el rendimiento.

En ambos casos, manipulará los mismos objetos COM de Excel y es probable que el tiempo de ejecución sea muy similar.

Su rendimiento dependerá principalmente de las técnicas que esté utilizando para manipular los objetos de Excel. Como ejemplo simple, puede asignar valores de un Rango de Excel a un Array bidimensional en una sola instrucción: esto es mucho más rápido que iterar a través de las filas y columnas en el código y copiar valores en su matriz uno por uno.

Le recomiendo que publique fragmentos del código VBA que le parezcan demasiado lentos y le pida consejos para mejorar el rendimiento.

4

Puede probar mi complemento ESharper para escribir un comando de automatización de Excel en C#. Es más fácil que crear una aplicación C# separada o un complemento, y tendrá acceso tanto al modelo de objetos de Excel como a la API de Excel C con más opciones para la optimización del rendimiento.

Cuestiones relacionadas