Pergunta

pergunta básica:? Como faço para carregar um modelo do Excel para uso com POI e guardá-la para um arquivo XLS

Editar:

A resposta é:

FileInputStream inputStream = new FileInputStream(new File(templateFile));
Workbook workbook = new HSSFWorkbook(inputStream);

(Basta carregar o modelo como uma pasta de trabalho e, em seguida, escrever o livro como um arquivo XLS em outro lugar.)

Foi útil?

Solução

Você já tentou carregá-lo como um .xls padrão usando POI, altera-lo e depois salvá-lo?

Esta é a abordagem que eu usei para inserir macros em um .xls gerado-POI. Eu crio o arquivo com o macro (reconhecidamente como um .xls) e, em seguida, carregá-lo em meu aplicativo, preencher com dados e salvar como um .xls recém-criado. Isso tudo funcionou bem.

Outras dicas

Você pode carregar diretamente um .xls que atuará como o modelo e modificá-lo.

POIFSFileSystem fs = new POIFSFileSystem(
                new FileInputStream("template.xls"));
HSSFWorkbook wb = new  HSSFWorkbook(fs, true);

Será que carregar um xls, preservando sua estrutura (macros incluídas). Você pode, em seguida, modificá-lo,

HSSFSheet sheet1 = wb.getSheet("Data");
...

e depois salvá-lo.

FileOutputStream fileOut = new FileOutputStream("new.xls"); 
wb.write(fileOut);
fileOut.close();

Espero que isso ajude.

Você também pode usar o modelo interno como um recurso.

InputStream fis = ChartSample.class.getResourceAsStream("/templates.xls");
HSSFWorkbook wb = new HSSFWorkbook(fis);        
fis.close();
HSSFSheet sh = wb.getSheetAt(0); 
//Here you go

E a ressalva de que:

out = new FileOutputStream("./new.xls");
wb.write(out);
out.close();

Você pode criar um arquivo XLS partir de um modelo XLS.

Mas, para fazer isso, você precisa criar uma cópia do modelo de cada vez que você precisa para usar o modelo. Se não, você vai editar o modelo original (o que você não quer).

Então, você precisa primeiro obter o seu arquivo de modelo:

URL url = Thread.currentThread().getContextClassLoader().getResource("templates/template.xls");
File file = new File(url.getPath());

Copie o arquivo de modelo:

try (FileOutputStream fileOutputStream = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {

    Files.copy(file.toPath(), fileOutputStream);

    Workbook workbook = new HSSFWorkbook();
    workbook.write(fileOutputStream);
}

Acesse o novo arquivo copiado:

FileInputStream inp = new FileInputStream("/home/jake/fileCopiedFromTemplate.xls");

Criar um Workbook, assim você pode escrever no seu novo arquivo:

Workbook workbook = WorkbookFactory.create(inp);

Depois de escrever em sua pasta de trabalho:

try (FileOutputStream fileOut = new FileOutputStream("/home/jake/fileCopiedFromTemplate.xls")) {
    workbook.write(fileOut);
}

Uma dica para criar um arquivo de modelo XLS é marcar o modelo com alguma variável para você localizar a posição que você gostaria de preencher. Como:

------------------------------------
|   | Columna A     | Column B     |
------------------------------------
| 1 |  Some description            | 
------------------------------------
| 2 | {person.name} | {person.age} |
------------------------------------

Para o Excel-arquivos com o uso .xlsx o seguinte:

FileInputStream inputStream = new FileInputStream(new File("template.xlsx"));
        @SuppressWarnings("resource")
        Workbook wb = new XSSFWorkbook(inputStream);  
        Sheet sheet = wb.getSheet("sheet1");

Você pode usar XSSF adicionando poi-OOXML dependência no seu pom.xml maven se você quer salvá-lo em formato 2007+.

Se você tem template.xlsx arquivo com uma folha de resumo neste xmls e você quer mudar uma célula especial que você pode fazê-lo como:

XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("template.xlsx"));           
FileOutputStream fileOut = new FileOutputStream("new.xlsx");
XSSFSheet sheet1 = wb.getSheet("Summary");
XSSFRow row = sheet1.getRow(15);
XSSFCell cell = row.getCell(3);
cell.setCellValue("Bharthan");

wb.write(fileOut);
log.info("Written xls file");
fileOut.close();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top