generar un excel descargable con apache poi jsp servlet
Lo que estoy asiendo es generando un archivo de Excel en java apartir de una consulta en sql el archivo se genera al presionar un boton de generar informe que hice en jsp y la idea es que al momento de que se genera el Excel me aparezca la opción de descargar dicho archivo desde el jsp por medio del servlet, la verdad es que no tengo mucho conocimiento sobre esto si me pueden explicar como hacerlo muchas gracias, por el momento lo que estoy asiendo es generando el Excel en una carpeta en el dico E: pero lo que necesito es que aparesca la opcion de descargarlo desde el jsp adjunto la parte donde genero el Excel
try {
con = new Conexion();
query = "SELECT Nro_Documento,Nombres,Horas_registradas_en_jira,Proyecto,Horas_laboradas_sin_extras_y_sin_novedades FROM tbljira ORDER BY Proyecto";
st = con.getConn().prepareStatement(query);
res = st.executeQuery();
while (res.next()) {
TablaJira j = new TablaJira();
j.setNro_Documento(res.getString("Nro_Documento"));
j.setNombres(res.getString("Nombres"));
j.setHoras_registradas_en_jira(res.getDouble("Horas_registradas_en_jira"));
j.setProyecto(res.getString("proyecto"));
j.setHoras_laboradas_sin_extras_sin_novedades(res.getDouble("Horas_laboradas_sin_extras_y_sin_novedades"));
Jira.add(j);
}
for (int j = 0; j < Jira.size(); j++) {
String ide = Jira.get(j).getNro_Documento();
String name = Jira.get(j).getNombres();
Double h = Jira.get(j).getHoras_registradas_en_jira();
String proyec = Jira.get(j).getProyecto();
Double time = Jira.get(j).getHoras_laboradas_sin_extras_sin_novedades();
if (j == 0) {
idean = ide;
nombrean = name;
timea = h;
proan = proyec;
horat = time;
} else if (ide.equals(idean) & proyec.equals(proan)) {
suma = suma + h;
idean = ide;
proan = proyec;
nombrean = name;
horat = time;
} else {
det = new Detalle_Servicios();
if (suma == 0) {
total = timea / horat;
totalco = total * 100;
BigDecimal bd = new BigDecimal(totalco);
bd = bd.setScale(2, RoundingMode.HALF_UP);
det.setPorcentaje_dedicacion(bd.doubleValue());
det.setHoras_laboradas_mes(horat);
det.setNombre_empleado(nombrean);
det.setNro_Documento(idean);
det.setHoras_dedicadas_Servicio(timea);
det.setNombre_proyecto(proan);
lst.add(det);
nombrean = name;
horat = time;
idean = ide;
proan = proyec;
timea = 0.0;
suma = h;
} else {
total = suma / horat;
totalco = total * 100;
BigDecimal bd = new BigDecimal(totalco);
bd = bd.setScale(2, RoundingMode.HALF_UP);
det.setPorcentaje_dedicacion(bd.doubleValue());
det.setHoras_laboradas_mes(horat);
det.setNombre_empleado(nombrean);
det.setNro_Documento(idean);
det.setHoras_dedicadas_Servicio(suma);
det.setNombre_proyecto(proan);
lst.add(det);
nombrean = name;
horat = time;
idean = ide;
proan = proyec;
suma = h;
}
if (j + 1 == Jira.size()) {
if (ide.equals(idean) & proyec.equals(proan)) {
det = new Detalle_Servicios();
total = suma / horat;
totalco = total * 100;
BigDecimal bd = new BigDecimal(totalco);
bd = bd.setScale(2, RoundingMode.HALF_UP);
det.setNombre_proyecto(proan);
det.setPorcentaje_dedicacion(bd.doubleValue());
det.setHoras_laboradas_mes(horat);
det.setNombre_empleado(nombrean);
det.setNro_Documento(idean);
det.setHoras_dedicadas_Servicio(suma);
lst.add(det);
}
}
}
}
XSSFWorkbook wb = new XSSFWorkbook();
XSSFSheet sheet = wb.createSheet();
CellStyle style = wb.createCellStyle();
DataFormat forma = wb.createDataFormat();
Font font = wb.createFont();
font.setFontName("Arial");
style.setFillForegroundColor((short) 30);
style.setBottomBorderColor((short) 8);
style.setFillPattern(CellStyle.SOLID_FOREGROUND);
style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setWrapText(true);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
font.setColor(HSSFColor.WHITE.index);
style.setFont(font);
XSSFRow row = sheet.createRow(1);
XSSFCell cell;
row.createCell(1).setCellValue("Nombre Empleado");
row.getCell(1).setCellStyle(style);
row.createCell(2).setCellValue("Proyecto");
row.getCell(2).setCellStyle(style);
row.createCell(3).setCellValue("Horas Dedicadas al servicios");
row.getCell(3).setCellStyle(style);
row.createCell(4).setCellValue("Horas laboradas");
row.getCell(4).setCellStyle(style);
row.createCell(5).setCellValue("Porcentaje de dedicacion");
row.getCell(5).setCellStyle(style);
int i = 2;
for (int n = 0; n < lst.size(); n++) {
nom = lst.get(n).getNombre_empleado();
pro = lst.get(n).getNombre_proyecto();
sum = lst.get(n).getHoras_dedicadas_Servicio();
to = lst.get(n).getPorcentaje_dedicacion();
horat = lst.get(n).getHoras_laboradas_mes();
row = sheet.createRow(i++);
cell = row.createCell(1);
cell.setCellValue(nom);
cell = row.createCell(2);
cell.setCellValue(pro);
cell = row.createCell(3);
cell.setCellValue(sum);
cell = row.createCell(4);
cell.setCellValue(horat);
cell = row.createCell(5);
cell.setCellValue(to);
}
try {
String ex = "ensayo";
try (FileOutputStream archivo = new FileOutputStream("E:/copia/" + ex + ".xlsx")) {
wb.write(archivo);
archivo.close();
}
} catch (IOException e) {
System.out.println(e);
}
} catch (SQLException ex) {
System.out.println(ex);
Logger.getLogger(Detalle_ServiciosDao.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
- Inicie sesión o regístrese para enviar comentarios
Activar la "opción de descarga" en los navegadores
Victor,
En la comunicación entre un navegador y el servidor de aplicaciones existe un protocolo (http), el cuál utiliza encabezados para indicar lo que el navegador deberá realizar con el contenido que está recibiendo.
Supongamos que ya generaste el archivo y este ya se encuentra en algún lado y que ya tienes un Servlet que es el que entregará el archivo:
Lo que se está haciendo es: