Manipulação de Arquivo - Ler XLS e Gravar TXT para fazer CSV

Olá meus caros!

Bom, primeiramente tenho algumas dúvidas, que agradeceria muito se me ajudassem:

  1. O Apache POI manipula XLSX, como faço? Tem exemplo? Só consigo manipular XLS
  2. Para ler um XLS (e XLSX) e gravar um CSV, tenho que gravar o conteúdo do XLS em um arquivo txt e salvar como CSV, ou ele tem alguma funçao para converter?

Bom, após as dúvidas, vem o que mais me enteressa no momento.
Segue meu código, após ele as dúvidas:

String corrigido_aux = null;
		int cont =0;
		FileWriter x = new FileWriter("c:/testefinal.txt",true);
		       
			InputStream inputstream = null;
			inputstream = new FileInputStream(new File("c:/testefinal.xls"));
			
			POIFSFileSystem fileSystem = null;
			fileSystem = new POIFSFileSystem (inputstream);
			
			HSSFWorkbook      workBook = new HSSFWorkbook (fileSystem);
			HSSFSheet         sheet    = workBook.getSheetAt (0);
			Iterator<Row> rows     = sheet.rowIterator();  
            
            while (rows.hasNext()) {  
                Row row = rows.next(); 
                
            Iterator<Cell> cells = row.cellIterator ();
            
            while (cells.hasNext()) {
				Cell cell = cells.next();
				
				String valorCelula = null;  
				if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING){  
					valorCelula = cell.getStringCellValue();
					cont=cont++;
				}
				else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){  
				    valorCelula = String.valueOf(cell.getNumericCellValue());
					cont=cont++;
				}
				
				String corrigido=null;

				corrigido = valorCelula;
				
				//cell.setCellValue(corrigido);
				
				System.out.println(corrigido);
				
				if (corrigido_aux == null){
				corrigido_aux = corrigido;
				} else{
					corrigido_aux =corrigido_aux+","+corrigido;
					if (cont == 15){
					x.write(corrigido_aux+"\n");
					corrigido_aux = null;
					}
				}				
				/*try{  
	               // o true significa q o arquivo será constante  
	               FileWriter x = new FileWriter("c:/testefinal.csv",true);   
	              
	               //conteudo += "\n\r"; // criando nova linha e recuo no arquivo           
	               x.write(corrigido+","); // armazena o texto no objeto x, que aponta para o arquivo           
	               x.close(); // cria o arquivo           
	               System.out.println("Arquivo gravado com sucesso");  
	            }    
	            catch(Exception e){  
	               System.out.println("Arquivo NAO FOI gravado !");
	            }*/
				
            }
            x.close();
			System.out.println("Arquivo gravado com sucesso");
			}

Com o trecho acima, estou tentando ler de um XLS e gravar em um TXT que posteriormente iria (tentaria) converter para CSV.

Porém o meu txt está vindo vazio… por que?

Olá,

Me recordo que quando verifiquei a documentação do POI havia uma menção à documentos XLSX (eu tive de fazer algo quase igual ao que você está fazendo). Se não me engando, funciona igual tanto para XLS quanto XLSX.

É muito fácil transformar o Xls em CSV. Basta você concatenar um “;” após ler cada célula (e claro, fazer as devidas verificações).
Não deve usar mais que 6 linhas de código.

[quote=Ricardo Prado]Olá,

Me recordo que quando verifiquei a documentação do POI havia uma menção à documentos XLSX (eu tive de fazer algo quase igual ao que você está fazendo). Se não me engando, funciona igual tanto para XLS quanto XLSX.

É muito fácil transformar o Xls em CSV. Basta você concatenar um “;” após ler cada célula (e claro, fazer as devidas verificações).
Não deve usar mais que 6 linhas de código.

[/quote]

Consegui fazer XLS -> CSV
Ou seja, fiz a contingencia

Agora tenho que fazer o definitivo… Se alguem tiver algum exemplo de XLSX (XSSF) -> CSV eu agradeço!
Enquanto isso vou tentando aqui!

String corrigido_aux = null;
		int cont =0;
		FileWriter fw = new FileWriter("c:/testefinal.csv");
		String lineSeparator = System.getProperty("line.separator");
		       
			InputStream inputstream = null;
			inputstream = new FileInputStream(new File("c:/testefinal.xls"));
			
			POIFSFileSystem fileSystem = null;
			fileSystem = new POIFSFileSystem (inputstream);
			
			HSSFWorkbook      workBook = new HSSFWorkbook (fileSystem);
			HSSFSheet         sheet    = workBook.getSheetAt (0);
			Iterator<Row> rows     = sheet.rowIterator();  
            
            while (rows.hasNext()) {  
                Row row = rows.next(); 
                
            Iterator<Cell> cells = row.cellIterator ();
            
            while (cells.hasNext()) {
				Cell cell = cells.next();
				
				String valorCelula = null;  
				if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING){  
					valorCelula = cell.getStringCellValue();
					cont=cont+1;
				}
				else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){  
				    valorCelula = String.valueOf(cell.getNumericCellValue());
					cont=cont+1;
				} 
				else{
					cont=cont+1;
				}
				
				String corrigido=null;

				corrigido = valorCelula;
				
				//cell.setCellValue(corrigido);
				
				if (corrigido == null || corrigido == ""){
					corrigido=" ";
				}
				
				System.out.println(corrigido);
				if (corrigido_aux == null){
					corrigido_aux =corrigido;
				} else{
					if (cont != 15){
					corrigido_aux =corrigido_aux+","+corrigido;
					}
					else {
						corrigido_aux =corrigido_aux+","+corrigido;
						fw.write(corrigido_aux+lineSeparator);
						corrigido_aux = null;
						cont=0;
					}
				}				
				
            }
			}
            fw.close();
	   System.out.println("Arquivo gravado com sucesso");