Buen día, sucede que necesito hacer una funcionalidad que modifique unos campos que estan definidos en un documento excel en JAVA al igual que lo estoy haciendo en este momento con documentos word (.docx), la verdad sé que hay una API pero no tengo idea de donde encontrarla ni como funciona, la idea es que haga lo siguiente, colocaré el ejemplo del Word ya que se quiere lo mismo pero en documentos excel:
El documento WORD, la plantilla está hecha de la siguiente manera, por ejemplo:
Buen día <item2> <item3>, su número de solicitud es el <item1>, cuando la evaluemos se le informará
Datos del solicitante:
Nombre: <item2>
Apellido: <item3>
Cargo: <item4>
Institución: <item5>
En el programa se ejecuta y digamos, hace una propuesta para que envien más juegos a su universidad, entonces generamos la solicitud y le creamos el documento y quedaria:
Buen día Fabian Montoya, su número de solicitud es el 123456789, cuando la evaluemos se le informará
Datos del solicitante:
Nombre: Fabian
Apellido: Montoya
Cargo: Estudiante
Institución: Universidad Nacional
Y listo, se le genera el documento y se le da para que descargue, así funciona el de documentos word, ahora necesito poder hacer lo mismo pero con plantillas de documentos que estan hechas en excel.
Con la misma estructura, cambiar que estén allí por datos que manejamos desde el programa, no sé si me hago entender, espero su ayuda, lo he buscaod durante dos horas y no consigo nada.
Уже я это сделал, quedГі asГ-.
static String ruta1 = "D:/", document1 = "FOR_001_EXAMPLE", type1 = ".xlsx";
static String Documento = "", NewDocumento = "";
public static void XLSX(String Ubicacion) throws IOException {
Ubicacion = Ubicacion.replace("\\", "/"); //Convierto todos los \ en / para congruir en direcciones
try {
File Fil = new File(Ubicacion); //Se crea un archivo File
FileInputStream file = new FileInputStream(Fil); //Se crea archivo FileInput para la lectura
// Crear el objeto que tendra el libro de Excel
XSSFWorkbook workbook = new XSSFWorkbook(file);
/*
* Obtenemos la primera pestaña a la que se quiera procesar indicando el indice.
* Una vez obtenida la hoja excel con las filas que se quieren leer obtenemos el iterator
* que nos permite recorrer cada una de las filas que contiene.
*/
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> rowIterator = sheet.iterator();
Row row;
// Recorremos todas las filas para mostrar el contenido de cada celda
while (rowIterator.hasNext()) {
row = rowIterator.next();
// Obtenemos el iterator que permite recorres todas las celdas de una fila
Iterator<Cell> cellIterator = row.cellIterator();
Cell celda;
while (cellIterator.hasNext()) {
celda = cellIterator.next();
// Dependiendo del formato de la celda el valor se debe mostrar como String, Fecha, boolean, entero...
switch (celda.getCellType()) {
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(celda)) {
// System.out.println(celda.getDateCellValue());
} else {
//System.out.println(celda.getNumericCellValue());
}
break;
case Cell.CELL_TYPE_STRING:
String item = "";
item = celda.getStringCellValue(); //Tomamos el valor de la celda
if (item.startsWith("<") && item.endsWith(">")) { //validamos que el contenido de la celda comience por < y termine en >
item = item.toLowerCase(); //Hago todo el item en minuscula
item = item.replace(">", "");
item = item.replace("<", "");
System.out.println("ITEM: "+item);
Merge(celda, item); //enviamos donde se le cambiará el item por el valor
}
break;
case Cell.CELL_TYPE_BOOLEAN:
System.out.println(celda.getBooleanCellValue());
break;
}
}
}
// cerramos el libro excel
file.close();
//Se genera el nuevo archivo con los datos cambiados
NewDocumento = "A01_" + "MergeFULL_" + document1 + "_SASPRUEBA_XLSX" + type1; //Creamos el nombre del documento
NewDocumento = ruta1 + NewDocumento; //Agregamos el nombre del documento a la ruta donde se almacena
FileOutputStream fileOut = new FileOutputStream(NewDocumento); //Doy la ruta y el nombre del archivo nuevo que se generará
workbook.write(fileOut); //Escribo el nuevo archivo
fileOut.close(); //Cierro el archivo
} catch (Exception ex) {
System.out.println("ERROR: " + ex);
}
}
public static void Merge(Cell cell, String item) {
if (item.equals("item1")) {
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("Fabian Dario Montoya");
} else if (item.equals("item3")) {
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("Excel_GO");
} else {
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue("Item_not_found");
}
}
public static void main(String args[]) throws IOException, FileNotFoundException, InvalidFormatException {
Documento = ruta1 + document1 + type1.toLowerCase();
//Documento = ruta2+document2+type2;
if (Documento.endsWith(".xlsx")) {
XLSX(Documento);
System.out.println("====??? GENERADO DOCUMENT XLSX ???======");
} else if (Documento.endsWith(".xls")) {
XLS(Documento);
System.out.println("====??? GENERADO DOCUMENT XLS ???======");
} else {
System.out.println("Document not have the correct format!, please check it.");
}
}
Та же самая librerГ - позволяет тебе создавать документы в Excel и или изменять, одинокий ищи в Вебе "производить excel с индейцем-апачием poi в java" есть слишком много примеров, дело в том, что я не понимаю хорошо, что то, что ты хочешь сделать в Excel.
приходит в голову мне что-то asГ - было бы нужно приспосабливать это для того, чтобы он не пробежал весь excel...
//Recorrido por filas
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext()) {
Row row = rowIterator.next();
rowIndex = row.getRowNum();
int rowIndex2 = rowIndex +1;
Iterator<Cell> cellIterator = row.cellIterator();
//Recorrido por columnas
while (cellIterator.hasNext()) {
String valorCelda = cell.getStringCellValue().trim();
if(valorcelda.equals("<item9>")){
//Cambiamos valor de la celda
}
}
}