天天看點

java 導出自定義樣式excel

由于項目需要 要求導出一個這樣的表格

java 導出自定義樣式excel

然而 正常導出的表格都是這樣嬸兒地

java 導出自定義樣式excel

這種格式網上demo有很多就不詳細說了 ,主要說說上面三行是怎麼畫的。

第一行大标題,是9行合并成的一行,而且字型大小需要單獨設定

HSSFSheet sheet;
HSSFCell cell;
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename="+filename+".xls");
sheet = workbook.createSheet("物料調撥單");
		
//第一行大标題
HSSFCellStyle tStyle = workbook.createCellStyle(); 
tStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
tStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
HSSFFont tFont = workbook.createFont();	//标題字型
tFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
tFont.setFontHeightInPoints((short)15);
tStyle.setFont(tFont);
short twidth = 15,theight=25*20;
sheet.setDefaultColumnWidth(twidth);
cell = getCell(sheet,0,0);
cell.setCellStyle(tStyle);
setText(cell,"物料調撥單");
sheet.getRow(0).setHeight(theight);
sheet.addMergedRegion(new CellRangeAddress(0,0,0,8));
           

sheet.addMergedRegion(new CellRangeAddress(0,0,0,8)); 這個就是合并單元格方法,需要傳入4個int行的參數,

分别是 起始行,結束行,起始列,結束列。因為我們需要在第一行顯示1個9個格的标題是以行就是從0到0,列是從0到8

同理: 下面2行可以這麼設定合并

sheet.addMergedRegion(new CellRangeAddress(1, 1, 1, 2));
sheet.addMergedRegion(new CellRangeAddress(2, 2, 1, 2));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 4, 5));
sheet.addMergedRegion(new CellRangeAddress(2, 2, 4, 5));
sheet.addMergedRegion(new CellRangeAddress(1, 1, 7, 8));
sheet.addMergedRegion(new CellRangeAddress(2, 2, 7, 8));
           

由于合并單元格,值取的是第一個單元格的值,是以後面的單元格可以直接指派為空