Ler e gravar no excel XLSM com java

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.

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();
}

1 curtida

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.

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

1 curtida

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();
            }

        }
1 curtida