Precisa de sugestões sobre a leitura de XLs enormes com a validação dos dados

Eu tenho um requisito no qual o cliente carrega uma planilha contendo milhares de linhas. colunas diferentes de uma linha têm diferentes tipos de dados e os dados devem obedecer a algumas regras de validação.eg

abaixo está uma estrutura de arquivo de exemplo:

(Header - Colume_name,Variable_type,field_size,i/p mask,required_field,validation_Text) 
(P/N,String,20,none,yes,none)           
(qty,Integer,10,none,yes,none)
(Ship_From,String,20,none,yes,none)
(Request_Date,Date,MM/DD/YY ,yes,none)  
(Status,String,10,none,yes,Failed OR Qualified)

ao ler a planilha xl, preciso validar os dados com relação às restrições acima e, em caso de erro nos dados, preciso armazenar o erro e informar o cliente.

Informe-me a melhor abordagem possível para manter o desempenho do sistema.

Qualquer resposta antecipada será muito apreciada.

Obrigado, Ashish Gupta

Resposta 1

Se entendi sua pergunta, você gostaria de ler um arquivo de regras de validação, como a amostra acima. Você gostaria de compilar as regras para que elas leiam uma grande planilha do Excel (ou é um arquivo CSV?) E talvez imprima uma mensagem para cada linha considerada inválida.

Parece um processo de duas passagens: 1) Validação e compilação do arquivo de validação e 2) Compilação da saída da passagem 1 e aplicação no arquivo do Excel.

Você pode abordar a validação de campo de várias maneiras, dependendo de suas habilidades e inclinações.

  • Desenvolva o código VBA para ler o arquivo de validação. Em seguida, escreva uma macro separada para validar cada linha
  • Escreva um analisador no seu idioma favorito que leia o arquivo de validação. Adicione algumas colunas à planilha de leitura do Excel com campos como Nome da coluna (por exemplo, Qtd), tipo (por exemplo, Inteiro), necessário (por exemplo, verdadeiro). Faça com que o Excel ou o OpenOffice realce linhas inválidas
  • Faça com que lex e yacc gerem um analisador Java ou C ++ para analisar o arquivo de validação e gerar BNF. Depois, leia outro arquivo lex e yacc na saída da etapa anterior e valide o arquivo do Excel.

Você indicou POIna sua tag, então estou pensando que você desejará gerar código Java.

Obviamente, você também pode escrever um programa único para fazer toda essa meta-compilação e compilação, mas esse seria um processo frágil.

Se você tiver alguma liberdade para especificar o arquivo de validação, convém transformá-lo em um arquivo .XSD, porque existem ferramentas automatizadas para simplificar sua verificação. Existem ferramentas para determinar se o arquivo XML era válido, além de compiladores que podem transformá-lo em Java.

(Um pensamento me veio à mente quando eu estava lendo seu arquivo de validação. Como você separará uma parte da outra? Por exemplo, se você ler P/N, Qty, Request_Date, Ship_From, Status, P/N, é aquela parte com dois P / N ou uma parte completa e uma com várias partes necessárias ausência de?)

Resposta: 2

Meu primeiro pensamento foi o Excel fazer essa validação, como Rajah parece sugerir também. A funcionalidade incorporada e / ou o VBA devem poder lidar com esses requisitos. Se você precisar lidar com isso em Java, eu usaria a abordagem XML.

Saúde, Wim

Resposta: 3

Ouvi falar de um amigo validando suas planilhas usando o JBOSS DROOLS: http://www.jboss.org/drools

Resposta: 4

Estou usando o código a seguir para extrair alguns dados e salvá-los no arquivo CSV. Mas o problema agora é que o programa grava os dados no arquivo CSV e sempre que o código é executado novamente, isso ocorre ...

Estou usando o Jackson 2.3.2 e quero definir a primeira tentativa de exibição padrão do ObjectMapper: http://wiki.fasterxml.com/JacksonJsonViews#Implementation // atalho: objectMapper.writeValueUsingView (out, ...

Enquanto estou trabalhando no meio de algum projeto do kotlin, fiquei com uma confusão, como se uma classe filho implementa outra classe pai ou implementa uma interface? como se estivesse usando algumas interfaces e ...

Estou recebendo esse erro no ambiente Linux ao exibir gráficos de pizza 3D no navegador da web. Funciona perfeitamente bem no ambiente do Windows. java.lang.NoClassDefFoundError: Não foi possível ...