2009-02-14 18 views
5

Tengo una aplicación MS-Access que formatea los datos en dos hojas de cálculo grandes (más de 20,000 filas), importa estos datos en tablas, ejecuta algunas consultas comparando los datos y las salidas resultados como archivos de Excel.Alternativa a MS-Access/Excel para manipulación de hojas de cálculo

El problema es que a medida que crece la aplicación (y el código VBA) se está convirtiendo en un problema con Access y me pregunto si hay un mejor enfoque?

¿Cuáles serían las ventajas/desventajas de una solución .NET (C#) decir, en comparación con MS-Access, y cuáles serían las mejores bibliotecas, etc. para usar?

Cheers,

Breandán

Saludos para las respuestas hasta el momento, se olvidó de mencionar sin embargo que esta aplicación tiene que ser estar solo, tengo que ser capaz de empaquetar la aplicación y y enviarlo al usuario final para instalar en su computadora. Esto solo tiene (de nota) que MS-Office y .Net Framework están instalados, así que no estoy seguro de cuán factible sería MySQL, etc. sin dónde alojarlo.

+0

¿Cuál es el dolor que está experimentando el uso de Acceso? ¿Es la velocidad de ejecución? ¿Está importando los datos en Access, manipulándolos y luego generando archivos de Excel? –

+0

Principalmente es el horrible IDE de VBA, manejo de excepciones pobre, opciones de registro y seguimiento de cambio de código. Se siente como un paso atrás en comparación con lo que he usado antes (java/eclipse, C#/VS). De momento, la aplicación es estable, pero es probable que se amplíe en los próximos meses, por lo que estoy buscando cambiar ahora. –

Respuesta

5

Moverse a .Net le permitiría tener mejores herramientas a su disposición para manipular los datos.

Sin embargo, debe tener cuidado con respecto a lo que está haciendo exactamente con su solución de acceso: si está haciendo un manejo especial de casos para procesar los datos desde y hacia Excel, es probable que lo haga todavía tiene que hacer eso en el idioma o marco que elija.

Si tiene una gran cantidad de código invertido en llevar los datos de Excel a Access, aún podría conservar el acceso para esa parte y usar .Net para ayudarlo a hacer las comparaciones y la creación del informe de Excel resultante.

Es un poco difícil hacer una recomendación sin saber más acerca de su proyecto.

Si solo quiere usar la automatización para incorporar datos y crear su archivo de Excel, entonces .Net puede no ofrecerle mucho ya que igual tendrá que hacer exactamente las mismas cosas que ya hizo en Access .

En su lugar, puede considerar el uso de componentes comerciales de Excel que utilizan diferentes paradigmas para abrir/crear hojas de cálculo Excel de una manera más agradable.
Hay algunos proveedores de componentes que tienen estos.

Una solución es también utilizar herramientas de informes para extraer directamente los datos de Excel y generar un informe que simplemente puede guardar de nuevo en Excel.

Mi consejo sería:

  • Si su solución de acceso es estable y que está haciendo su trabajo, entonces usted puede considerar mantenerla.
    La mudanza a un nuevo sistema le costará tiempo y dinero y debe verificar si el resultado vale la inversión.
  • Si se siente demasiado limitado por las capacidades de Access, dedique algo de tiempo a experimentar con varias soluciones y componentes que le permiten manipular Excel, por ejemplo, utilizando un proveedor de LINQ Excel (1 o 2) puede proporcionar una buena abstracción, o intente varios commercial components hasta que encuentre uno que se ajuste a sus necesidades.

Si va por la ruta .Net, puede que ni siquiera necesite una base de datos para procesar los datos.
Si lo hace, siempre puede usar Jet -o su nueva versión, ACE- como un back-end que creará bases de datos de MSAccess.
Ya está instalado en la mayoría de las máquinas y es compatible con las herramientas de MS.
Otras buenas opciones son SQL Server Compact y SQLite ya que ninguna de estas requiere una configuración compleja, solo una DLL para enviar con su proyecto.

1

La biblioteca de puntos de interés de Apache puede ser útil para usted. Está basado en Java y puede trabajar en archivos de Excel.

Otra opción puede ser utilizar un controlador ODBC directo para trabajar en el archivo XLS. Podría ser un montón de discos, aunque ..

http://poi.apache.org/

El proyecto POI consiste en APIs para manipular varios formatos de archivos basados ​​en formato de Documento Compuesto OLE 2 de Microsoft, y el formato OpenXML Oficina, utilizando Java puro. En resumen, puede leer y escribir archivos de MS Excel utilizando Java. Además, puede leer y escribir archivos de MS Word y MS PowerPoint utilizando Java. POI es su solución Java Excel (para Excel 97-2007). Sin embargo, tenemos una API completa para portar otros formatos de Documento Compuesto OLE 2 y damos la bienvenida a otros para que participen.

OLE 2 Documento compuesto Los archivos basados ​​en formato incluyen la mayoría de los archivos de Microsoft Office como XLS y DOC, así como los formatos de archivo basados ​​en la API de serialización MFC.

Los archivos basados ​​en Office OpenXML Format incluyen los nuevos formatos de archivo xml (2007+), incluidos los archivos de Microsoft Office como XLSX, DOCX y PPTX.

Editar: Salida de una herramienta como Monarch Pro, es excelente en la minería de datos, etc.

-2

Me pregunto si usted ha pasado de acceso. Para esto nacen bases de datos más robustas, como SQL Server. 20,000 filas no es un número grande para SQL Server, pero apuesto a que está llegando para Access. ¿Cuánto espacio de disco ocupa Access cuando lo ejecuta? ¿Qué tan rápido crece la información, si es que lo hace?

¿Qué tan bien conoce C# versus VB? Si no conoce bien C#, podría ser una buena oportunidad para aprender. Es un problema que ya sabes bien.

+0

¿No se puede leer? La pregunta original dice que es el CÓDIGO que se vuelve difícil de manejar. 20K filas es una cantidad de información completamente insignificante para que Jet maneje. –

+0

Al lado, 20000 fila no es nada para acceder. Puede consultar 100k filas con facilidad. Si siempre me desconcierta, la gente entiende las limitaciones reales de Access frente a las imaginarias. Si –

+0

Acceso eran realmente una base de datos de la empresa, no habría habido ninguna razón para Microsoft a "colaborar" con Sybase para que pudieran llegar a SQL Server. No estoy convencido de que Access sea la mejor solución para múltiples usuarios simultáneos, de cualquier forma. – duffymo

0

Consideraría un sistema que usara SQL Server Compact para comenzar. Puede usarlo sin instalación si lo desea (aunque le sugiero que lo haga, es mucho más fácil suponer que el dll requerido está en el GAC). Si posteriormente encuentra que necesita más funcionalidad (por ejemplo, procedimientos almacenados o columnas TEXT/BLOB, ese tipo de cosas), mudarse a SQL Server será trivial.

Si su base de datos se regenera cada vez, entonces intentar hacer diferentes cosas es tan simple como apuntar a un archivo diferente.

Si tiene un código considerable en VBA, le sugiero que primero lo mueva a VB.Net (haciendo esto, primero y la transición más propensa a errores más fácil) y migrando eso a C# si así lo desea.

En cuanto a la generación/alteración de la hoja de Excel tiene tres opciones.

Una es usar VSTO aunque Wikipedia es una descripción mucho mejor. Esto será lo más parecido a su antiguo desarrollo de VBA, aunque tiene un conjunto completamente diferente de complejidades.

Otra es usar una de las bibliotecas de salida de Excel, hay una few y muchas más comerciales. No podría recomendar ninguno personalmente aunque other's here have.

Lo último es simplemente descargar csv y dejar que Excel se encargue de él cuando lo abra.

+0

Sin embargo, otra persona sin comprensión de lectura. El problema es el CÓDIGO, no la gestión de datos. –

+0

FFS - la mayor parte de mi post se dedicó a código, o qué no se molestan en leer más allá compacta servidor SQL, que es hacer que el código sea más fácil (y dado su edición haría su despliegue más fácil también !!) – ShuggyCoUk

+0

Ah, ya veo. Estás enfadado porque tu trabajo consiste en soluciones de acceso y te desagrada que la gente lo golpee. Lee MI publicación. ¿me ves golpeando el acceso? Se interesa en el movimiento a C#, ¿existe un proveedor LINQ to Avión (Salvo esto chicos trabajan http://www.codeproject.com/KB/linq/linqToSql_7.aspx)? – ShuggyCoUk

2

Yo diría que para los volúmenes de datos de 20,000 filas con las que está trabajando, una base de datos del servidor SQL realmente no le va a ganar mucho, excepto para pasar a procedimientos almacenados para la manipulación de datos. A este respecto, es posiblemente mejor que VBA, por lo que probablemente obtendrá una base de código que es más fácil de mantener. Sin embargo, los volúmenes de datos que describe son pequeños para los estándares de la base de datos. No esperaría que el rendimiento sea un problema hasta que tenga uno o dos órdenes de magnitud más de datos que eso.

Si desea hacer un trabajo de data munging, es posible que sea mejor con un lenguaje de scripting como Perl o Python. Estos lenguajes son mucho mejores para las tareas de manipulación de datos que C# o VB.Net. Se pueden encontrar buenas distribuciones de Windows gratuitas tanto de Perl como de Python en www.activestate.com.

Excel se puede programar con Python a través de la interfaz python-com usando la misma API que VBA, pero ganando un lenguaje mucho mejor con una gran variedad de libraies disponibles. Del mismo modo, esto también se puede hacer con Perl hasta Win32::OLE. También hay algunas bibliotecas de utilidades como pyexcelerator, xlrd y xlwt, para Python y Spreadsheet::WriteExcel/Spreadsheet::ParseExcel para Perl. Hay también módulos disponibles para la creación de aplicaciones de Windows instalables como Py2EXE o Perl Dev Kit

This Stackoverflow posting discute el uso de Excel de Python, incluyendo la generación de una envoltura con MakePy, en un poco más de profundidad.

Si está trabajando con .Net, también puede probar IronPython - es una implementación .Net nativa de Python, que se ejecutará en cualquier lugar con un tiempo de ejecución .Net adecuado instalado. También puede obtener un complemento gratuito de Visual Studio llamado IronPythonStudio).

Otra alternativa es R. R es principalmente un paquete estadístico, pero el lenguaje central tiene sólidas capacidades de manipulación de datos y una variedad de bibliotecas de interfaz (y otras como gráficos, varios cálculos estadísticos y un Excel interface.. En realidad, es una herramienta de generación de informes y manipulación de datos de uso general bastante poderosa

0

Me parece que Access no lo está ayudando como intermediario. 20K filas no me parece mucho. Dijiste que pasas de Excel a Access y luego de vuelta a Excel. ¿Necesitas mantener los datos de acceso?

Si no, sugiero que vaya con .Net y una biblioteca de terceros como Excel FlexCel y vaya directamente de Excel a Excel en la memoria. Empaquetar aplicaciones .Net es fácil con un instalador o ClickOnce.

2

En SpreadsheetGear, nuestra especialidad son los componentes de hoja de cálculo compatibles con Excel de alto rendimiento. Oímos todo el tiempo (vea algunas cotizaciones de clientes en this page) que SpreadsheetGear for .NET es más rápido y fácil de usar que otras opciones.

Hay live ASP.NET samples con fuente C# y VB.NET y free trial si quiere probarlo usted mismo.

responsabilidad: Soy dueño de SpreadsheetGear LLC

+0

Joe - ¡¡¡rock !! –

1

SpreadsheetGear totalmente rocas! Obtienes lo mejor de ambos mundos, donde toda la lógica en la hoja de cálculo está disponible para que la ejecutes desde tu código. Realmente puede acortar su desarrollo, ya que puede hacer que las unidades de negocios ayuden a dar forma a la lógica de sus procesos comerciales.

Cuestiones relacionadas