POI中设置Excel单元格格式

引用:http://apps.hi.baidu.com/share/detail/17249059java

POI中可能会用到一些须要设置EXCEL单元格格式的操做小结:c++

先获取工做薄对象:app

HSSFWorkbook wb = new HSSFWorkbook();字体

HSSFSheet sheet = wb.createSheet();url

HSSFCellStyle setBorder = wb.createCellStyle();spa

1、设置背景色:excel

setBorder.setFillForegroundColor((short) 13);// 设置背景色
setBorder.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);code

2、设置边框:对象

setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框
setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框
setBorder.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框
setBorder.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框索引

3、设置居中:

setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中

4、设置字体:

HSSFFont font = wb.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short) 16);//设置字体大小

HSSFFont font2 = wb.createFont();
font2.setFontName("仿宋_GB2312");
font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//粗体显示
font2.setFontHeightInPoints((short) 12);

setBorder.setFont(font);//选择须要用到的字体格式

5、设置列宽:

sheet.setColumnWidth(0, 3766); //第一个参数表明列id(从0开始),第2个参数表明宽度值  参考 :"2012-08-10"的宽度为2500

6、设置自动换行:

setBorder.setWrapText(true);//设置自动换行

7、合并单元格:

Region region1 = new Region(0, (short) 0, 0, (short) 6);

//参数1:行号 参数2:起始列号 参数3:行号 参数4:终止列号

或者用

CellRangeAddress region1 = new CellRangeAddress(rowNumber, rowNumber, (short) 0, (short) 11);

但应注意两个构造方法的参数不是同样的,具体使用哪一个取决于POI的不一样版本。
sheet.addMergedRegion(region1);

目前用过的就这么多,后续有新的会继续添加。


导出例子:

List<StatMonthResp> statMonthRespList = tempResp.getResult();// 结果数据放入list

if (null == statMonthRespList)
{
statMonthRespList = new ArrayList<StatMonthResp>();
}
String url = "/file/统计.xls";

try
{
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFCellStyle setBorder = workbook.createCellStyle();
HSSFCellStyle setTitleBorder = workbook.createCellStyle();
HSSFCellStyle setTitleBorder1 = workbook.createCellStyle();
/*****设置单元格格式*****/
setBorder.setBorderBottom(HSSFCellStyle.BORDER_THIN);
setBorder.setBorderRight(HSSFCellStyle.BORDER_THIN);
setBorder.setBorderTop(HSSFCellStyle.BORDER_THIN);
setBorder.setBorderLeft(HSSFCellStyle.BORDER_THIN);

setBorder.setBottomBorderColor(HSSFColor.BLACK.index); // 下边框
setBorder.setLeftBorderColor(HSSFColor.BLACK.index);// 左边框
setBorder.setTopBorderColor(HSSFColor.BLACK.index);// 上边框
setBorder.setRightBorderColor(HSSFColor.BLACK.index);// 右边框

setBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
setBorder.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);

HSSFFont font = workbook.createFont();// 设置字体大小
font.setFontName("黑体");
font.setFontHeightInPoints((short) 10);

HSSFFont font2 = workbook.createFont();
font2.setFontName("黑体");
font2.setFontHeightInPoints((short) 20);// 设置标题字体大小

HSSFFont font3 = workbook.createFont();
font3.setFontName("黑体");
font3.setFontHeightInPoints((short) 14);// 设置小标题字体大小

setTitleBorder.setFont(font2);
setTitleBorder.setAlignment(HSSFCellStyle.ALIGN_CENTER);
setBorder.setFont(font);
setBorder.setWrapText(true);
setTitleBorder1.setFont(font3);
/*****设置单元格格式 end*****/
HSSFSheet sheet = workbook.createSheet();

// 设置列宽
int[] columnWidths = getColumnWidths();
for (int i = 0; i < columnWidths.length; i++)
{
	sheet.setColumnWidth(i, columnWidths[i]);
}

/******合并单元格*****/
CellRangeAddress region1 = new CellRangeAddress(0, 0, (short) 0, (short) 17);
CellRangeAddress region2 = new CellRangeAddress(1, 1, (short) 0, (short) 7);
sheet.addMergedRegion(region1);
sheet.addMergedRegion(region2);
/******合并单元格 end*****/

/****** 第1行 ********/
HSSFRow titleRow = sheet.createRow(0);
titleRow.setHeight((short) 800);
HSSFCell fcell = titleRow.createCell(0);
fcell.setCellValue(getMonth() + " 统计汇总表");
fcell.setCellStyle(setTitleBorder);

/****** 第2行 ********/
HSSFRow titleRow1 = sheet.createRow(1);
titleRow1.setHeight((short) 450);
HSSFCell fcell1 = titleRow1.createCell(0);
fcell1.setCellValue("填报单位:xxx");
fcell1.setCellStyle(setTitleBorder1);

/****** 第3行 ********/
HSSFRow firstRow = sheet.createRow(2);
firstRow.setHeight((short) 800);
HSSFCell cell;
int cellIndex = 0;
String[] titles = excelTitles();
for (String field : titles)
{
	// 在索引0的位置建立单元格(左上端)
	cell = firstRow.createCell(cellIndex);
	// 定义单元格为字符串类型
	cell.setCellStyle(setBorder);
	cell.setCellValue(field);
	cellIndex++;
}

/****** 第4行 ********/
int r = 3;
for (StatMonthResp statMonthResp : statMonthRespList)
{
	String[] datas = excelData(statMonthResp);

	HSSFRow secondRow = sheet.createRow(r);

	for (int i = 0; i < datas.length; i++)
	{
		cell = secondRow.createCell(i);
		cell.setCellStyle(setBorder);
		cell.setCellValue(datas[i]);
	}

	r++;
}

// 新建一输出文件流
FileOutputStream fOut = new FileOutputStream(request.getRealPath("/") + url);
// 把相应的Excel 工做簿存盘

workbook.write(fOut);
fOut.flush();
// 操做结束,关闭文件
IOUtils.close(fOut);
System.out.println("文件生成...");
} catch (Exception e)
{

}

private int[] getColumnWidths()
	{
		int[] columnWidths = new int[4];
		columnWidths[0] = 2000;
		columnWidths[1] = 2000;
		columnWidths[2] = 3000;
		columnWidths[3] = 2000;
		
		return columnWidths;
	}
	
	private String[] excelTitles()
	{
		String[] titles = new String[4];
		titles[0] = "单位";
		titles[1] = "车辆总数";
		titles[2] = "其中已安装GPS车辆数";
		titles[3] = "GPS安装率";
		
		return titles;
	}
	
	private String[] excelData(StatMonthResp statMonthResp)
	{
		int c = 0;
		String[] datas = new String[4];
		datas[c++] = "";
		datas[c++] = String.valueOf(statMonthResp.getCars());
		datas[c++] = String.valueOf(statMonthResp.getGpsCars());
		datas[c++] = String.valueOf(statMonthResp.getGpsRate());
		
		return datas;
	}
相关文章
相关标签/搜索