/ / Carga de grandes cantidades de datos desde un objeto .NET a Excel: .net, excel, vba

Carga de grandes cantidades de datos desde objetos .NET a Excel: .net, excel, vba

Estoy trabajando en una aplicación de base de datos que usa Excel como interfaz. Esencialmente, es una macro de Excel que se conecta a una base de datos a través de una biblioteca .NET.

El principal problema es que los clientes deben estarcapaz de gestionar grandes cantidades de datos (5000-20000 líneas y alrededor de 160 columnas). Me las arreglé para minimizar los retrasos tanto en el acceso a la base de datos como al cargar la parte completa de datos como cadenas directamente en el rango de la hoja de cálculo. Propiedad de valor (formateada como una cadena [,]). Fue rápido, fácil y eficiente.

Pero ahora el cliente necesita soporte para formatos de Excel. Como, en, necesito Excel para reconocer fechas como tales, números como tales, etc. Esto, aunque admite tipos de datos no uniformes: una columna de fecha podría contener un formato de fecha, pero también podría incluir texto u otra cosa.

He probado varios enfoques:-Siga cargando las cadenas como tales, formateando previamente la columna de acuerdo con su tipo de fecha esperado (ws.range (range.EntireColumn.Address) .NumberFormat = "0", por ejemplo). No funcionó. -Cargue todo el fragmento, como de costumbre, y luego obligue a Excel a volver a cargar las columnas con tipos de datos que no sean de texto, reasignando toda la fila:

With ws.range(ws.Cells(4, 11), ws.Cells(ws.UsedRange.rows.Count, 11))
.NumberFormat = "dd/mm/yyyy"
.Value = .Value
End With

Pero este comienza a ser bastante lento cuando necesito reformatear 30 columnas en un documento con ~ 7000 filas más o menos.

-Finalmente, intenté modificar la función, para que cree un objeto [,] matriz, con los elementos en sus tipos de datos adecuados (fecha y hora, int, etc.). Una vez más, Excel es terriblemente lento para desempaquetar objetos genéricos.

Mi única suposición es que podría cargar los fragmentos por tipo de datos, pero eso se mete horriblemente con mis métodos actuales.

¿Existe alguna alternativa para mejorar la velocidad o reducir las transformaciones?

Gracias por adelantado.

EDITAR:

Para aclarar:Excel actúa como un cliente pesado que permite a varios usuarios (cada uno con su propio Excel) leer y actualizar una base de datos remota. El mayor problema fue en realidad lidiar con bloqueos de tablas para escrituras simultáneas y demás. El problema ahora es que la cantidad de datos es tan grande que necesito hacer algo para acelerar los tiempos de importación y exportación. Ya hice soportable el tiempo de exportación (la mayoría de las veces los usuarios no cargan tantos datos en la base de datos), pero los tiempos de importación son lentos y el principal cuello de botella es escribir en la hoja de cálculo.

Además, los usuarios ya están acostumbrados auna herramienta similar que usaban de otra empresa antes de que yo entrara, por lo que son muy firmes en mantener el mismo formato. Esa aplicación envía una solicitud a un servicio web, desde el cual descarga un CSV con la información. Luego carga ese CSV como fuente de datos en Excel. Ese enfoque no es válido para mí porque no tengo acceso administrativo a la máquina donde está la base de datos, ni ningún otro que pueda usar como puente para el WS. Solo tengo privilegios administrativos para la base de datos en sí. Supongo que sí. podría construir el CSV a partir de los datos consultados en el dll, y luego usar el mismo enfoque que ellos, sin embargo.

Respuestas

0 para la respuesta № 1

Si quieres crear archivos de datos de Excel formateados en su código .NET, esta es una lista de bibliotecas populares que pueden hacerlo:

y articulo Cree un archivo de Excel (.XLS y .XLSX) desde C # tiene una discusión más larga de varias opciones

Si quieres actualizar la base de datos remota desde Excel VBA código luego artículo Código VBA para realizar un bucle y actualizar la columna de la base de datos de acceso de MS desde Excel y esta consulta de Google: "sitio: stackoverflow.com base de datos de actualización de Excel vba"

Si quieres abrir de forma invisible un archivo de datos de Excel creado por su backend .NET para su posterior procesamiento / fusión y luego el artículo Abra el archivo de Excel para leer con VBA sin pantalla tiene algunos consejos sobre cómo puedes hacerlo

Si quieres obtenga mejores respuestas de más personas luego intente reducir claramente el problema a una pregunta clara (https://stackoverflow.com/help/how-to-ask) y también proporcionar algún código en forma de Ejemplo mínimo, completo y verificable