2009-04-03 14 views
18

Pregunta básica: ¿Cómo cargo una plantilla de Excel para usarla con POI y luego la guardo en un archivo XLS?Uso de plantillas de Excel con Apache POI

Editar:

La respuesta es:

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

(. Sólo tiene que cargar la plantilla como un libro y luego escribir el libro como un archivo XLS en otro lugar)

Respuesta

15

Ha intentado cargarlo como un estándar .xls usando POI, enmendando y luego guardándolo?

Este es el enfoque que he usado para insertar macros en un archivo .xls generado por PDI. Creo el archivo con la macro (admitidamente como .xls) y luego lo cargo en mi aplicación, lo rellena con datos y lo guardo como un .xls recién creado. Eso funcionó bien.

+0

me trataron de la misma para cargar las macros con poi 3,13 y 3,15 , pero no funciona para mí. Quiero decir, después de guardar el archivo, faltan las macros. ¿Tiene alguna idea? –

10

Puede cargar directamente un archivo .xls que actuará como plantilla y modificarlo.

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

Carga un xls, conservando su estructura (macros incluidos). A continuación, puede modificarlo,

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

y guárdelo.

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

Espero que esto ayude.

3

También puede usar la plantilla interna como recurso.

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

Y excepto que:

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

Se puede crear un archivo XLS partir de una plantilla XLS.

Pero, para ello, debe crear una copia de la plantilla cada vez que necesite utilizar la plantilla. De lo contrario, editará la plantilla original (lo que no desea).

Por lo tanto, es necesario primero obtener su archivo de plantilla:

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

Copia el archivo de plantilla:

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

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

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

acceso al nuevo archivo copiado:

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

Crear una Workbook, para que pueda escribir en su nuevo archivo:

Workbook workbook = WorkbookFactory.create(inp); 

Después de escribir en el libro:

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

Un consejo para crear un archivo de plantilla XLS es marcar la plantilla con alguna variable para usted localizar la posición que desea rellenar.Al igual que:

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

de Excel-archivos con .xlsx utilice la siguiente:

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

Usted puede utilizar XSSF mediante la adición de la dependencia poi-OOXML en su pom.xml experto si desea guardarlo en 2007 + formato.

Si tiene template.xlsx archivo con una hoja de resumen en este XMLs y desea cambiar una celda en particular puede hacerlo 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(); 
Cuestiones relacionadas