YmouseY 0 Posted August 22, 2013 Report Share Posted August 22, 2013 (edited) Boa tarde, estou a iniciar na programação, e estou a criar um programa que dada uma determinada Folha de calculo do Excel. Introduzindo uma linha, à escolha do utilizador, o que o programa faz é apresentar toda a restante informação contida nessa linha (as restantes colunas). Tudo aquilo que não usa formulas eu consigo fazer aparecer no meu JAva Eclipse, mas todos os outros campos que contenham formulas, o output apresentado é a formula do Excel. Eu como quero que apareça o resultado da formula e não, a formula em si, o que tenho que fazer para conseguir isso? Alguém me pode ajudar, por favor? Não sei se é importante referir que usei a biblioteca APACHE-POI-3.9 para conseguir mexer nas celulas do Excel. Desde já obrigado. Cumprimentos Edited August 23, 2013 by Rui Carlos Título editado (ver regras relativas à "urgência"). Link to post Share on other sites
jpfelgueiras 3 Posted August 22, 2013 Report Share Posted August 22, 2013 Em vez do APACE-POI podes usar o jxl usando o jxl Cell.getContents() e NumberCell.getValue() retornam o valor. usando FormulaCell.getFormula() retorna a formula. no caso de ser obrigatório o uso do POI vais ter de calcular a formula ( o que e bastante chato se não tiveres ideia de que tipo de formula te vai aparecer) espero ter ajudado Link to post Share on other sites
Ernest 18 Posted August 23, 2013 Report Share Posted August 23, 2013 Bom dia, Não é por meter no título "ajuda urgente" que a resposta vai aparecer mais rapidamente... Etapa -1 : JDK 1.7_25 (o mais recente possível) e o Eclipse Kepler Etapa 0 : Eu utilizo LibreOffice e Apache OpenOffice são gratuitos e Open Source: https://www.libreoffice.org/ Etapa 1 : Apache POI - the Java API for Microsoft Documents : http://poi.apache.org/ Etapa 2 : Apache POI - Download : poi-bin-3.9-20121203.zip (ou equivalente) Etapa 3 : criar um directory lib/ no projeto Eclipse Kepler e meter dentro o ficheiro poi-3.9-20121203.jar (ou equivalente) Etapa 4 : fazer um click direito no projeto Eclipse Kepler e ir no Java Build Path / Libraries fazer Add JARs... do ficheiro JAR visto na etapa 3 Etapa 5 : criar uma classe Java : TestPOI_Formula.java Meter este Exemplo no ficheiro TestPOI_Formula.java : import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class TestPOI_Formula { public static void main( String[] args) { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet("minha Folha XLS"); HSSFRow row = sheet.createRow(0); HSSFCell cell = null; cell = row.createCell((short) 0); cell.setCellValue(10); cell = row.createCell((short) 1); cell.setCellValue(20); cell = row.createCell((short) 2); cell.setCellValue(30); cell = row.createCell((short) 3); cell.setCellType(HSSFCell.CELL_TYPE_FORMULA); cell.setCellFormula("SUM(A1:C1)"); FileOutputStream fileOut; try { fileOut = new FileOutputStream("meuficheiro.xls"); wb.write(fileOut); fileOut.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } Etapa 6 : click direito no ficheiro e depois : Run as -> Java Application Etapa 7 : fazer um F5 (refresh) e o ficheiro vai aparecer no projeto Eclipse com a valor da formula Etapa 8 : verifique abrindo o ficheiro com o LibreOffice Calc que 10 + 20 + 30 = 60 Existem muitas outras soluções para trabalhar com o XLS com JAVA : Java Excel API - A Java API to read, write, and modify Excel spreadsheets http://jexcelapi.sourceforge.net/ Mas o Apache POI é muito potente Cordialmente Ernest Duarte Link to post Share on other sites
jpfelgueiras 3 Posted August 23, 2013 Report Share Posted August 23, 2013 Ernest Duarte Acho que leste o problema ao contrario, a questão não e escrever mas excel mas sim ler. Link to post Share on other sites
Ernest 18 Posted August 23, 2013 Report Share Posted August 23, 2013 Bom dia, Para ler um documento, use a classe POIFSFileSystem. Um dos construtores desta classe espera em parâmetro um objeto do tipo InputStream que envolve um fluxo para ler o documento. A classe HSSFSheet fornece o método rowIterator() que retorna um tipo de objeto iterator que permite que você navegue as linhas da folha. Para obter um dado, é melhor ter certeza do tipo de dados associado à célula usando o método getCellType (). O getNumericCellValue() e getRichStringCellValue() métodos de classe HSSFCell para obter o valor da célula de acordo com seu tipo. O setCellType () método HSSFCell classe permite que você especifique o tipo de conteúdo da célula (CELL_TYPE_BLANK, CELL_TYPE_BOOLEAN, CELL_TYPE_ERROR, CELL_TYPE_FORMULA, CELL_TYPE_NUMERIC, CELL_TYPE_STRING) Vários sobrecargas do método setValue () da classe HSSFCell pode fornecer o valor da célula. GET é para ler e SET é para escrever ... Cordialmente Ernest Duarte Link to post Share on other sites
YmouseY 0 Posted August 23, 2013 Author Report Share Posted August 23, 2013 Bom dia, desde já quero agradecer as respostas rápidas. Ernest coloquei o titulo dessa forma porque realmente tenho urgência em obter respostas e resultados.. Se isso lhe irritou de alguma forma, peço desculpa. Quanto ao tuturial que apresentou, eu tenho o programa e já tenho a biblioteca importada e já consigo ler dados, e escrever (coisa que de momento não me interessa). O problema real que tenho é todas as células que não contenham formulas eu consigo fazer o output sem qualquer problema (estou a usar o HSSFCell nColuna = linha.getCell(i)), mas todas as celulas que contenham formulas o output apresentado é a formula em si, deixo um exemplo que aparece: ("=CONCATENAR(SE(AO4<>"Sim";"";CONCATENAR($AO$2;" - "));SE(AP4<>"Sim";"";CONCATENAR($AP$2;" - "));SE(AM4<>"Sim";"";CONCATENAR($AM$2;" - "));SE(AF4<>"Não";"" Mas o que eu pretendo no meu output é o resultado da formula e não a formula em si. jpfelgueiras, vou importa essa biblioteca e vou tentar com esses metodos. Mais uma vez, obrigado pelas respostas. Cumprimentos Link to post Share on other sites
Ernest 18 Posted August 23, 2013 Report Share Posted August 23, 2013 Bom dia, Você esperimentou com o HSSFFormulaEvaluator ? HSSFWorkbook wb = new HSSFWorkbook(); HSSFFormulaEvaluator fe = new HSSFFormulaEvaluator(wb); ... fe.clearAllCachedResultValues(); ... HSSFCell cell ... ... CellValue cv = fe.evaluate(cell); ... cv.getNumberValue() ... fe.evaluate(cell).getStringValue(); Cordialmente Ernest Duarte Link to post Share on other sites
YmouseY 0 Posted August 26, 2013 Author Report Share Posted August 26, 2013 Boas, já consegui resolver o problema. Tive que criar uma linha de código para reconhecer o tipo de celula, se String ou inteiro. Depois de feito isso, se fosse string bastou usar o codigo "getStringCellValue()" Caso fosse inteiro, usar este codigo "nColuna.getNumericCellValue()" Desta forma, o meu problema está resolvido, agradeço novamente a quem respondeu e tentou ajudar. Obrigado Cumprimentos Link to post Share on other sites
Hercles 4 Posted December 9, 2015 Report Share Posted December 9, 2015 E como faço pra salvar em outra linha sem apagar o que já esta escrito na planilha? Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now