Skip to content

ratodigital/ExcelScript

Repository files navigation

ExcelScript

Este é um projeto Java/Eclipse comum (sem Maven) que serve para leitura e manipulação de planilhas Excel.

Nos bastidores, o projeto usa a simples e direta Java Excel API.

A melhor forma de entender seu funcionamento é executando o target/excelscript.sh (ou .bat, se estiver no windows). São realizadas várias transformações nas planilhas localizadas na pasta /sample

Todas os comandos devem ser especificados no arquivo script.groovy, usando-se a sintaxe da linguagem Groovy. Usando um editor de texto comum você poderá automatizar várias operações de leitura e escrita em planilhas Excel.

Abaixo um trecho, para ilustrar o potencial da linguagem.

    import com.ratodigital.excelscript.util.Arquivo
    import com.ratodigital.excelscript.util.Excel

    Planilhas planilhas = new Planilhas(DIR_ENTRADA, DIR_SAIDA, EXT, SAIDA)

    planilhas.cpagar("cpagar")
  	
 
    class Planilhas {
	    String DIR_ENTRADA
	    String DIR_SAIDA
	    String EXT
	    String SAIDA
	
    	Planilhas(dirEntrada, dirSaida, ext, saida) {
		    DIR_ENTRADA = dirEntrada
		    DIR_SAIDA = dirSaida
		    EXT = ext
		    SAIDA = saida
	    }
	
	    public void cpagar(String file) {
		    String entrada = DIR_ENTRADA + file + EXT
		    String saida = DIR_SAIDA + file + SAIDA
		
		    Excel e = new Excel()
		
		    e.abrirParaEscrita(entrada, saida) 
				    .excluirUltimaLinha()
				    .removerTodasColunasExceto(
						    [0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 18, 19] as int[])
				    .inserirColuna(6, "Valor Total")
		
		    println "Adicionando valores na coluna Valor Total"
		    1.upto(*e.getTotalLinhas()*) { row ->
			    double valor = e.obtemValorCelula(6, row)
			    double multa = e.obtemValorCelula(7, row)
			    double juros = e.obtemValorCelula(8, row)
			    double desconto = e.obtemValorCelula(9, row)
			    double valorTotal = valor + multa + juros - desconto
		      e.alterarCelula(6, row, valorTotal)
    		}
		
		    e.removerColunas([7, 8, 9, 10] as int[]).salvarEFechar()
	    }
    }

Eu pensei em criar uma DSL mais fácil, mas cadê tempo? Quem tiver a fim de colaborar, fica à vontade!