Problema com apache POI porfavor me ajudeeeemmm

11 respostas
luistiagos

É o seguinte… eu preciso pegar uma planilha ja existente com alguns macros nela… onde antigamente o usuario inseria os dados na mão e apertava em um botão e ela fazia uns calculos e gerava uma porrada de relatorios… eu consegui abrir esta planilha com o apache - poi e editala porem apos eu editala pela aplicação todoas as macros que estão nela são deletadas… e eu não tenho como pegar o codigo das macros e colocar na aplicação pois devido a extensibilidade dos relatorios e calculos que ja são feitas pelas macros isto fica inviavel refazer no codigo… alguem sabe como posso contornar isto? tem alguma outra api que suporte macros?

11 Respostas

T

Cara, o mundo não é só Java.
Veja se alguém conseguiu fazer um script em Excel VBA ou VBScript que possa ser invocado por cscript.exe.
É pena que estou indo para casa, senão escrevia um exemplo bobo só para você ter uma idéia.

luistiagos

cscript.exe o que é isto?

T

Você precisa consultar alguém que domine mais as tecnologias Microsoft.
É que é o seguinte: se o Excel estiver instalado na máquina, ele disponibiliza a automação do Excel através não só das macros (que vêm dentro dos arquivos .XLS) mas também a partir de algum programa externo de script, como o cscript.exe, que interpreta programas VBScript e JScript.
Que tal dar uma perguntadinha para um seu colega que seja Microsoft-Man?
É coisa bastante simples - basicamente você precisa criar um arquivo .vbs, que é um arquivo-texto mesmo, criar um programa que referencie a tal planilha pelo Excel, modifique os valores conforme desejado, e solicite o recálculo das fórmulas.

Pegue o código a seguir, copie-ou para um arquivo “teste.vbs”, crie um arquivo “C:\teste.xls” (com o Excel, é claro), salve-o, rode o programa abaixo com o comando:

cscript teste.vbs

e então veja na célula A1 o valor gravado em teste.xls.

Set App = CreateObject ("Excel.Application")
App.Workbooks.Open ("C:\teste.xls")
App.Visible = False
App.UserControl = False
'-- Setando o valor da célula A1 para 1000
App.Worksheets(1).Range("A1").Value = 1000
'-- Recalculando
App.Calculate
'-- Salvando  
For Each w In App.Workbooks
    w.Save
Next
App.Quit
Set App = Nothing
T

Esqueci de avisar que esse programa também recalcula as fórmulas. Ponha algumas fórmulas nesse arquivo teste.xls que dependam da célula A1 e veja que elas serão recalculadas direitinho.

luistiagos

eu tenho como me conectar no banco com este script? se tem como eu faço com o oracle?
tem algum exemplo?

peczenyj

Se tu achar a sintaxe do VBScript hedionda (como eu acho) vc pode usar JScript :wink:

basta fazer

e voilá!

Outra forma seria usar Groovy
http://groovy.codehaus.org/COM+Scripting

Groovy utiliza Jacob

Ai basta escolher uma abordagem e mandar bala :slight_smile:

T

Carinha, eu não disse para você fazer TUDO via script.
É para fazer SÓ o que você não consegue fazer em Java.
Eu sugiro que você faça o seguinte:

  • Conecte-se ao banco em Java mesmo (que é o que funciona bem e você sabe melhor)
  • Crie um script cscript.vbs a partir dos dados que você puxou do banco - você sabe criar arquivos-texto, não?
  • Chame o cscript.vbs com Runtime.exec
    OK?
Luiz_Aguiar

Eu sei fazer mas não vou ajudar só por causa do “por favor me ajudem” no seu tópico, quem sabe assim vc aprende.

luistiagos

Eu sei fazer mas não vou ajudar só por causa do “por favor me ajudem” no seu tópico, quem sabe assim vc aprende.

o que tem de errado o “por favor me ajudem”?

luistiagos

thingol isto que vc disse de criar o codigo vb dinamicamente e usar java pra conectar no banco e tals ate me veio a cabeça mas o problema e que e meio gamgam… não teria uma forma mais elegante de fazer?

luistiagos

Tem como executar as macros tbm? do mesmo modo que faz com as formulas… mas com as macros?

Criado 10 de dezembro de 2007
Ultima resposta 14 de dez. de 2007
Respostas 11
Participantes 4