write with read poi create java excel apache-poi

with - write excel apache poi java



Usando plantillas de Excel con Apache POI (6)

Pregunta básica: ¿Cómo puedo cargar una plantilla de Excel para usar con POI y luego guardarla en un archivo XLS?

Editar:

La respuesta es:

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

(Solo cargue la plantilla como libro de trabajo y luego escríbalo como un archivo XLS en otro lugar).


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

Este es el enfoque que he utilizado para insertar macros en un .xls generado por POI. Creo el archivo con la macro (admitido como un .xls) y luego lo cargo en mi aplicación, relleno los datos y los guardo como un .xls recién creado. Que todo funcionó bien.


Para archivos de Excel con .xlsx use lo siguiente:

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


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

Cargará un xls, conservando su estructura (macros incluidas). A continuación, puede modificarlo,

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

y luego guardarlo.

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

Espero que esto ayude.


Puede crear un archivo XLS desde una plantilla XLS.

Pero, para hacer esto, necesita crear una copia de la plantilla cada vez que necesite usarla. De lo contrario, editará la plantilla original (lo que no desea).

Por lo tanto, primero necesita obtener su archivo de plantilla:

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

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

Accede al nuevo archivo copiado:

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

Crea un Workbook , para que puedas escribir en tu nuevo archivo:

Workbook workbook = WorkbookFactory.create(inp);

Después de escribir en su libro de trabajo:

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

Una sugerencia para crear un archivo de plantilla XLS es marcar la plantilla con alguna variable para que localice la posición que desea llenar. Me gusta:

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


Puede usar XSSF agregando la dependencia poi-ooxml en su maven pom.xml si desea guardarlo en el formato 2007+.

Si tiene un archivo template.xlsx 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();


También puede utilizar la plantilla interna como un recurso.

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

Y guarde eso:

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