Como você normalmente importar dados de uma planilha a várias colunas de banco de dados?

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

Pergunta

Por alguma razão, eu tenho um monte de clientes que possuem dados existentes que são armazenadas em planilhas. Muitas vezes, há centenas, se não milhares de itens em cada planilha, e pedir ao cliente para inseri-los manualmente através de um site (ou céu proíbem a importação-los dessa forma eu) está fora de questão. Normalmente, estes dados não simplesmente mapear coluna planilha para coluna de banco de dados. Isso seria muito fácil. Muitas vezes, as necessidades de dados a serem manipulados antes de ir para o banco de dados (necessidades de dados a ser dividida por vírgulas, etc.) ou as necessidades de dados a ser espalhados em várias tabelas. Ou ambos.

Eu estou fazendo esta pergunta, não porque eu não sei de uma infinidade de maneiras de fazer isso, mas porque eu não ter resolvido em uma maneira que não se sente como é preciso mais trabalho do que deveria. Até agora eu tenho tomado todas as seguintes abordagens (e provavelmente mais que eu tenha esquecido):

  • Usando o Excel para modificar os dados, por isso é um pouco mais fácil de importação
  • A importação de toda a planilha em uma tabela temporária e depois importar com o SQL
  • Escrevendo um script e importar os dados com ele (eu usei VBScript, C # e agora rubi)

Até agora, usando um script tem sido a forma que parecia mais flexível, mas ainda se sente um pouco desajeitado. Eu tenho que executar esta tarefa o suficiente que eu mesmo contemplado escrevendo um pequeno DSL para ele, apenas para acelerar as coisas.

Mas antes de eu fazer isso, eu sou curioso, se existe uma maneira melhor?

Foi útil?

Solução

Você tem que estabelecer limites, se você puder. Você deve tentar e fornecer um modelo para eles para uso com os dados esperados, o que inclui o tipo de arquivo (Excel, CSV, etc.), os nomes das colunas, os valores válidos, etc. Você deve permitir que o utilizado para procurar o arquivo e enviá-lo na sua página / formulário.

Uma vez que o arquivo é carregado, você precisa fazer a validação e importação. Você pode usar ADO.NET, fluxos de arquivo, DTS / SSIS, ou automação de escritório para fazer isso (se você estiver usando a pilha Microsoft). Na parte de validação, você deve informar ao usuário exatamente o que eles fizeram de errado ou necessidade de mudança. Isso pode incluir a ter a página de validação tem os dados reais em um datagrid e fornecendo etiquetas vermelhas com erros na linha / coluna exata. Se você usar o Office Automation, você pode dar-lhes o número de células exata, mas o PIA Office é uma dor no pescoço.

Quando a validação for aceita, você pode importar as informações da maneira que quiser. Eu prefiro colocá-lo em uma tabela de teste e usando um proc armazenado para carregá-lo, mas isso é só comigo. Alguns preferem usar o modelo de objeto, mas isso pode ser muito lento se você tiver uma grande quantidade de dados.

Se você estiver carregando pessoalmente esses arquivos manualmente e ter que entrar e manipulá-los, gostaria de sugerir encontrar a comunalidade entre eles e chegando com um padrão a seguir. Uma vez que você tem isso, você pode fazê-lo de modo que o usuário pode fazer por si próprios ou você pode fazê-lo muito mais rápido mesmo.

Sim, isso é um monte de trabalho, mas a longo errado, quando há um programa que funciona 95% do tempo, ganha todos.

Se isto vai ser uma situação que simplesmente não pode ser automatizado, então você provavelmente só tem que ter uma tabela de preparação de baunilha e ter sql para a importação. Você vai ter que carregar os dados em uma tabela de teste, fazer a manipulação básica, e, em seguida, carregá-lo em te tabela de preparação que seus espera SQL.

Eu fiz tantos importações e ferramentas de ETL, e não há realmente nenhuma maneira fácil de lidar com isso. A única maneira é realmente chegar a um padrão que é razoável e cumpri-lo e programa em torno disso.

Outras dicas

sim .. que apenas suga.

Eu iria com o script. E eu suponho que você repetir colunas que têm de coincidir com uma única linha em outra tabela. Eu faria correspondência razoável e se você encontrar uma linha que o script não pode lidar com e mover os dados ... então registrá-lo e fazer alguém fazer isso manualmente.

São os pequenos detalhes que vou matá-lo sobre isso, é claro, mas, em geral, eu tive sucesso com a exportação de dados como CSV do Excel, em seguida, lê-lo usando um rool ou script, munging-lo conforme necessário, e inseri-lo. Dependendo do wonderfulness do meu ambiente, que pode ser feito com uma interface de base de dados para a linguagem de script, até e inclusive escrever instruções SQL inserir em um arquivo script.

Há bons pacotes CSV disponível para Python , rubi , e Perl .

A DSL é o caminho a percorrer.

Criar um modelo de domínio para o seu problema. Você fala sobre células, colunas, linhas, tabelas de banco de dados, corpo de decomposição, combinando campos, mapeamento a partir de células de colunas de banco de dados, de modo que são os conceitos que você precisa. Além disso, você provavelmente vai querer faixas (de células), e lençóis.

uma visão simples olha apenas para os valores nas planilhas, não as fórmulas subjacentes. Exportando a planilha como texto separado por guia dá-lhe acesso a isso. Se você precisa de acesso às fórmulas, você está melhor com a representação XML, ou o XML-planilha ou o formato XML do Office.

Você pode ser capaz de chegar a uma DSL em Excel. Isso poderia permitir que seus usuários mais inteligentes para fazer (parte de) o mapeamento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top