Skip to content

Commit

Permalink
javaee-movie-db - export xls
Browse files Browse the repository at this point in the history
  • Loading branch information
ltearno committed Nov 13, 2017
1 parent ff63679 commit e78d787
Show file tree
Hide file tree
Showing 2 changed files with 106 additions and 131 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
package fr.lteconsulting.training.moviedb.outil;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

import javax.servlet.ServletOutputStream;
import java.io.IOException;
import java.util.Date;

public class ExportExcel {
private Workbook workbook;
private Sheet sheet;

private final CellStyle intCellStyle;
private final CellStyle doubleCellStyle;
private final CellStyle textCellStyle;

private int currentLine = 0;

public ExportExcel() {
workbook = new HSSFWorkbook();
sheet = workbook.createSheet();

workbook.setSheetName(0, "Movie Database export " + new Date());

DataFormat df = workbook.createDataFormat();
doubleCellStyle = workbook.createCellStyle();
doubleCellStyle.setDataFormat(df.getFormat("#,##0.0"));

intCellStyle = workbook.createCellStyle();
intCellStyle.setDataFormat(df.getFormat("#"));

textCellStyle = workbook.createCellStyle();
textCellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));
}

public void line(Object... cellValues) {
Row row = sheet.createRow(currentLine++);

for (int c = 0; c < cellValues.length; c++) {
Object cellValue = cellValues[c];

Cell cell = row.createCell(c);
cell.setCellValue(cellValue.toString());

if (cellValue instanceof String)
cell.setCellStyle(textCellStyle);
else if (cellValue instanceof Integer)
cell.setCellStyle(intCellStyle);
else if (cellValue instanceof Double)
cell.setCellStyle(doubleCellStyle);
}
}

public void write(ServletOutputStream outputStream) throws IOException {
workbook.write(outputStream);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,14 @@
package fr.lteconsulting.training.moviedb.servlet;

import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

import fr.lteconsulting.training.moviedb.ejb.GestionCategories;
import fr.lteconsulting.training.moviedb.ejb.GestionFabricants;
import fr.lteconsulting.training.moviedb.ejb.GestionProduits;
import fr.lteconsulting.training.moviedb.model.Categorie;
import fr.lteconsulting.training.moviedb.model.Fabricant;
import fr.lteconsulting.training.moviedb.model.Produit;
import fr.lteconsulting.training.moviedb.outil.ExportExcel;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
Expand All @@ -15,136 +20,47 @@
public class ExportServlet extends HttpServlet {
private static final String FILENAME = "export.xls";

@EJB
private GestionCategories gestionCategories;

@EJB
private GestionFabricants gestionFabricants;

@EJB
private GestionProduits gestionProduits;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setHeader("Content-disposition", "attachment; filename=" + FILENAME);
resp.setHeader("content-type", "application/xls");

Workbook wb = new HSSFWorkbook();
// create a new sheet
Sheet s = wb.createSheet();
// declare a row object reference
Row r = null;
// declare a cell object reference
Cell c = null;
// create 3 cell styles
CellStyle cs = wb.createCellStyle();
CellStyle cs2 = wb.createCellStyle();
CellStyle cs3 = wb.createCellStyle();
DataFormat df = wb.createDataFormat();
// create 2 fonts objects
Font f = wb.createFont();
Font f2 = wb.createFont();

//set font 1 to 12 point type
f.setFontHeightInPoints((short) 12);
//make it blue
f.setColor((short) 0xc);
// make it bold
//arial is the default font
//f.setBoldweight(Font.BOLDWEIGHT_BOLD);

//set font 2 to 10 point type
f2.setFontHeightInPoints((short) 10);
//make it red
f2.setColor((short) Font.COLOR_RED);
//make it bold
//f2.setBoldweight(Font.BOLDWEIGHT_BOLD);

f2.setStrikeout(true);

//set cell stlye
cs.setFont(f);
//set the cell format
cs.setDataFormat(df.getFormat("#,##0.0"));

//set a thin border
//cs2.setBorderBottom(cs2.BORDER_THIN);
//fill w fg fill color
//cs2.setFillPattern((short) CellStyle.SOLID_FOREGROUND);
//set the cell format to text see DataFormat for a full list
cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));

// set the font
cs2.setFont(f2);

// set the sheet name in Unicode
wb.setSheetName(0, "\u0422\u0435\u0441\u0442\u043E\u0432\u0430\u044F " +
"\u0421\u0442\u0440\u0430\u043D\u0438\u0447\u043A\u0430");
// in case of plain ascii
// wb.setSheetName(0, "HSSF Test");
// create a sheet with 30 rows (0-29)
int rownum;
for (rownum = (short) 0; rownum < 30; rownum++) {
// create a row
r = s.createRow(rownum);
// on every other row
if ((rownum % 2) == 0) {
// make the row height bigger (in twips - 1/20 of a point)
r.setHeight((short) 0x249);
}

//r.setRowNum(( short ) rownum);
// create 10 cells (0-9) (the += 2 becomes apparent later
for (short cellnum = (short) 0; cellnum < 10; cellnum += 2) {
// create a numeric cell
c = r.createCell(cellnum);
// do some goofy math to demonstrate decimals
c.setCellValue(rownum * 10000 + cellnum
+ (((double) rownum / 1000)
+ ((double) cellnum / 10000)));

String cellValue;

// create a string cell (see why += 2 in the
c = r.createCell((short) (cellnum + 1));

// on every other row
if ((rownum % 2) == 0) {
// set this cell to the first cell style we defined
c.setCellStyle(cs);
// set the cell's string value to "Test"
c.setCellValue("Test");
} else {
c.setCellStyle(cs2);
// set the cell's string value to "\u0422\u0435\u0441\u0442"
c.setCellValue("\u0422\u0435\u0441\u0442");
}


// make this column a bit wider
s.setColumnWidth((short) (cellnum + 1), (short) ((50 * 8) / ((double) 1 / 20)));
}
}

//draw a thick black border on the row at the bottom using BLANKS
// advance 2 rows
rownum++;
rownum++;

r = s.createRow(rownum);

// define the third style to be the default
// except with a thick black border at the bottom
//cs3.setBorderBottom(cs3.BORDER_THICK);

//create 50 cells
for (short cellnum = (short) 0; cellnum < 50; cellnum++) {
//create a blank type cell (no value)
c = r.createCell(cellnum);
// set it to the thick black border style
c.setCellStyle(cs3);
}

//end draw thick black border


// demonstrate adding/naming and deleting a sheet
// create a sheet, set its title then delete it
s = wb.createSheet();
wb.setSheetName(1, "DeletedSheet");
wb.removeSheetAt(1);

wb.write(resp.getOutputStream());
ExportExcel export = new ExportExcel();

export.line("Export de la base de données Movie-DB");

export.line();
export.line("Catégories");
export.line("ID", "Nom");
for (Categorie categorie : gestionCategories.findAll())
export.line(categorie.getId(), categorie.getNom());

export.line();
export.line("Fabricants");
export.line("ID", "Nom", "Adresse");
for (Fabricant fabricant : gestionFabricants.findAll())
export.line(fabricant.getId(), fabricant.getNom(), fabricant.getAdresse());

export.line();
export.line("Produits");
export.line("ID", "ID_Catégorie", "Catégorie", "ID_Fabricant", "Fabricant", "Nom");
for (Produit produit : gestionProduits.findAll())
export.line(produit.getId(),
produit.getCategorie() != null ? produit.getCategorie().getId() : "",
produit.getCategorie() != null ? produit.getCategorie().getNom() : "",
produit.getFabricant() != null ? produit.getFabricant().getId() : "",
produit.getFabricant() != null ? produit.getFabricant().getNom() : "",
produit.getNom());

export.write(resp.getOutputStream());
}
}
}

0 comments on commit e78d787

Please sign in to comment.