¿Cómo se suelen importar datos desde una hoja de cálculo para múltiples columnas de base de datos?

StackOverflow https://stackoverflow.com/questions/390784

Pregunta

Por la razón que sea, tengo una gran cantidad de clientes que se han de datos que se almacena en las hojas de cálculo existentes. A menudo hay cientos, si no miles de artículos en cada hoja de cálculo, y pedir al cliente que entran de forma manual a través de un sitio web (o en el cielo se lo impidáis importación de esa manera a mí mismo) está fuera de la cuestión. Por lo general, estos datos no se limita mapa de columnas de hoja de cálculo a la columna de la base de datos. Eso sería demasiado fácil. A menudo, los datos tienen que ser manipulados antes de entrar en la base de datos (datos, se debe dividir por comas, etc.) o los datos tienen que ser extendido a través de múltiples tablas. O ambas cosas.

Estoy haciendo esta pregunta, no porque no sé de una multitud de maneras de hacerlo, sino porque no he asentado en una forma que no se siente como que se necesita más trabajo de lo que debería. Hasta ahora me he tomado todos los siguientes enfoques (y probablemente más que he olvidado):

  • Uso de Excel para modificar los datos, por lo que es un poco más fácil para importar
  • La importación de la hoja de cálculo en una tabla temporal y luego importar con SQL
  • Escribir un guión e importar los datos con él (he utilizado VBScript, C # y Ruby ahora)

Hasta ahora, el uso de un script ha sido la forma en que parecía más flexible, pero todavía se siente un poco torpe. Tengo que realizar esta tarea lo suficiente que incluso he contemplado escribir un poco de DSL para él, sólo para acelerar las cosas.

Pero antes de hacer eso, tengo curiosidad, ¿hay una manera mejor?

¿Fue útil?

Solución

Hay que poner límites, si es posible. Usted debe tratar de proporcionar una plantilla para que puedan utilizar con los datos esperados, que incluye el tipo de archivo (Excel, CSV, etc.), los nombres de columna, los valores válidos, etc Usted debe permitir que el utilizado para buscar el archivo y subirlo en su página / formulario.

Una vez que se ha cargado el archivo, lo que necesita hacer la validación y la importación. Se puede utilizar ADO.NET, secuencias de archivo, DTS / SSIS o de automatización de oficina para hacer esto (si está utilizando la pila de Microsoft). En la zona de validación, debe informar al usuario exactamente lo que hicieron mal o necesita cambiar. Esto podría incluir tener la página de validación tener los datos reales en una cuadrícula de datos y proporcionar etiquetas rojas con errores en la fila / columna exacta. Si utiliza Automatización de Office, puede darles el número exacto de células, pero la PIA de Office es un dolor en el cuello.

Una vez que se acepta la validación, puede importar la información como usted quiera. Yo prefiero ponerlo en una tabla de etapas y el uso de un procedimiento almacenado para cargarlo, pero eso es sólo yo. Algunos prefieren usar el modelo de objetos, pero esto puede ser muy lento si usted tiene una gran cantidad de datos.

Si va a cargar personalmente estos archivos manualmente y tener que entrar y manipularlos, sugeriría encontrar la comunalidad entre ellos y dar con un estándar a seguir. Una vez conseguido eso, se puede hacer que el usuario pueda hacerlo por sí mismos o se puede hacer que sea mucho más rápido usted mismo.

Sí, esto es un montón de trabajo, pero a la larga mal, cuando hay un programa que trabaja el 95% de las veces, todo el mundo gana.

Si esto va a ser una situación que simplemente no se puede automatizar, entonces es probable que sólo tiene que tener una tabla de etapas de vainilla y tienen SQL para la importación. Usted tendrá que cargar los datos en una tabla de ensayo, hacer la manipulación básica, y luego cargarlo en te tabla provisional que su SQL espera.

He hecho tantas importaciones y herramientas ETL, y realmente no hay manera fácil de manejar. La única manera es venir realmente con un estándar que es razonable y se adhieren a ella y programa en torno a eso.

Otros consejos

sí .. que es un asco.

Me gustaría ir con el guión. Y supongo que haya repetición de columnas que tienen que coincidir con una sola fila de otra tabla. Haría correspondencia razonable y si se encuentra una fila que el script no puede tratar y mover los datos ... a continuación, acceder y hacer que alguien lo haga manualmente.

Es los pequeños detalles que te mato en esto, por supuesto, pero en general, he tenido éxito con la exportación de los datos como CSV de Excel, a continuación, leerlo usando un rool o script, munging según sea necesario, e insertarlo. Dependiendo de la maravilla de mi entorno, que se puede hacer con una interfaz de base de datos en el lenguaje de script, hasta e incluyendo la redacción de las instrucciones INSERT SQL en un archivo de script.

Hay buenos paquetes CSV disponible para Python , Rubí , y Perl .

Un DSL es el camino a seguir.

Crear un modelo de dominio para su problema. Se habla de células, columnas, filas tablas de la base, cuerpo de descomposición, la combinación de campos, la cartografía de las células a las columnas de base de datos, de modo que son los conceptos que necesita. Además es probable que desee rangos (de las células), y hojas.

A simple vista sólo se fija en los valores de las hojas de cálculo, no las fórmulas subyacentes. La exportación de la hoja de cálculo como texto separado por tabuladores le da acceso a eso. Si necesita acceder a las fórmulas, estás mejor con la representación XML, ya sea el XML-hoja de cálculo o el formato XML de Office.

Usted puede ser capaz de llegar a una conexión DSL en Excel. Eso podría permitir a sus usuarios más inteligentes que hacer (parte de) la asignación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top