Ler e gravar no excel XLSM com java

4 respostas
M

Galera preciso ler e gravar no Excel com java, encontrei muitos exemplos pela web, só que eles fazem isso com a versão dos arquivos XLS e no meu caso a planilha em que será lido e salvo é XLSM, tem muitas macros que são necessárias na planilha. dei uma olhada no APACHE POI porem não entendi o mesmo. se puderem me indicar um exemplo fico grato.

4 Respostas

V

Pelo o que eu li, você realmente consegue ler um arquivo com macros e manter as macros, segue o código que faz isso. Acredito que o XSSFWorkbook seja igual ao HSSFWorkbook.

String fileName = "C:\\new_file.xlsm";

try {

Workbook workbook;
workbook = new XSSFWorkbook(
    OPCPackage.open("resources/template_with_macro.xlsm")
);

//DO STUF WITH WORKBOOK

FileOutputStream out = new FileOutputStream(new File(fileName));
workbook.write(out);
out.close();
System.out.println("xlsm created successfully..");
} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (InvalidFormatException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}
M

blz, valeu, quero saber se é possivel encontrar a próxima linha em branco na planilha para eu poder inserir novos registros através de uma aplicação em Swing.

staroski

https://poi.apache.org/spreadsheet/quick-guide.html

V

Com certeza deve existir um jeito mais fácil de ver se as linha esta em branco.
Mas para ler cada celula de uma linha eu faço da seguinte forma.

Sheet[] shs = workbook.getSheets();

Sheet sh = workbook.getSheet(0);

int linhas = sh.getRows();
for (int i = 1; i < linhas; i++) {
            try {
                Cell celula1 = sh.getCell(0, i);
                Cell celula2 = sh.getCell(1, i);
                Cell celula3 = sh.getCell(2, i);
                Cell celula4 = sh.getCell(3, i);
                Cell celula5 = sh.getCell(4, i);
                Cell celula6 = sh.getCell(5, i);
                Cell celula7 = sh.getCell(6, i);
                Cell celula8 = sh.getCell(7, i);
                //celula1.getContents() <- Pega o valor que esta dentro da celula.
                } catch (Exception exc) {
                exc.printStackTrace();
            }

        }
Criado 27 de março de 2018
Ultima resposta 28 de mar. de 2018
Respostas 4
Participantes 3