POI生成Excel常见的几种样式的设置

POI生成Excel常见的几种样式的设置

在之前写的“第一个Excel”例子生成的Excel样式非常难看,本文将做一个比较常见的样式设置的例子。

本文涉及的样式主要有如下几种:
1、设置列的宽度。
2、设置行高。
3、水平文本居中。
4、设置字体加粗、大小、种类。
5、设置cell边框。
6、设置cell背景色。
7、自定义颜色。
8、设置输出数据为String(有的数字以0开头,不定义String,开头的0都会自动剔除)。
9、自动换行(数据过长,自动换行)。

最终显现的样子如下:


本文沿用FirstExcel进行完善。闲话少说,附上代码:
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPalette;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.util.CellRangeAddress;

/**
 * 本节旨在粗浅应用单元格样式的设置
 * 				设置列的宽度
 * 				设置行高
 * 				text水平文本居中
 * 				设置字体加粗、大小、种类
 * 				设置cell边框
 * 				设置cell背景色
 * 				自定义颜色
 * 				设置输出数据为String(有的数字以0开头,不定义String,开头的0都会自动剔除)
 * 				自动换行(数据过长,自动换行)
 * @author longdage
 * */
public class StyleExcel {
	
	/**
	 * 最基本的poi代码
	 * @author longdage
	 * @category firstExcel
	 * @exception fileNotFindException
	 * */
	public void firstExcel(){
		//创建Excel工作簿:wk
		HSSFWorkbook wk = new HSSFWorkbook();
		//工作簿里创建一页:sheet
		HSSFSheet sheet = wk.createSheet("My first Excel");
		
		/************************************************/
		/*					设置列的宽度					*/
		/*		setColumnWidth: @param1:列的索引			*/
		/*						@param2:列的宽度			*/
		/************************************************/
		sheet.setColumnWidth(0,4000);// 设置列宽  
		sheet.setColumnWidth(1,4000);
		
		/************************************************/
		/*					设置标题样式					*/
		/*					设置字体样式					*/
		/************************************************/
		HSSFCellStyle titleStyle = wk.createCellStyle();
		titleStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
		titleStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
		
		/************************************************/
		/*					自定义颜色					*/
		/************************************************/
		String str = "#4ACAC0";
		int[] color = new int[3];
		color[0]=Integer.parseInt(str.substring(1, 3), 16); 
		color[1]=Integer.parseInt(str.substring(3, 5), 16); 
		color[2]=Integer.parseInt(str.substring(5, 7), 16); 
		HSSFPalette palette = wk.getCustomPalette();
		palette.setColorAtIndex(HSSFColor.BLACK.index,(byte)color[0],(byte)color[1],(byte)color[2]);
		
		HSSFFont titleFont = wk.createFont();
		titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//字体加粗
		titleFont.setFontName("宋体");//字体类型
		titleFont.setFontHeightInPoints((short)16);//一般标题大小16
		titleStyle.setFillForegroundColor(HSSFColor.BLACK.index);
		titleStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		titleStyle.setFont(titleFont);
		
		//标题:titleRow
		sheet.addMergedRegion(new CellRangeAddress(0,0,0,1));//合并第0行第0列到第0行的第一列
		HSSFRow titleRow = sheet.createRow(0);//第一行设置为标题
		HSSFCell titleCell = titleRow.createCell(0);//创建一个单元格
		titleCell.setCellValue("Title");//取名
		/*--------------------样式设置进Excel中-------------------*/
		titleCell.setCellStyle(titleStyle);
		
		/************************************************/
		/*					设置行的高度					*/
		/************************************************/
		titleRow.setHeightInPoints((float) (20));
		
		//header
		HSSFRow headerRow = sheet.createRow(1);//第二行设置为头部
		HSSFCell headerCell0 = headerRow.createCell(0);//创建第一个头部单元格
		HSSFCell headerCell1 = headerRow.createCell(1);//创建第二个头部单元格
		headerCell0.setCellValue("第一个header");
		headerCell1.setCellValue("第二个header1111111111111"); //设置长度,实验换行
		
		HSSFCellStyle headerStyle = wk.createCellStyle();
		headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
		headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中
		HSSFFont headerFont = wk.createFont();
		headerFont.setFontName("宋体");//字体类型
		headerFont.setFontHeightInPoints((short)11);//一般表头字体大小11
		headerStyle.setFont(headerFont);
		
		//自动换行
		headerStyle.setWrapText(true);
		
		headerCell0.setCellStyle(headerStyle);
		headerCell1.setCellStyle(headerStyle);
		
		//正文
		HSSFRow row = sheet.createRow(2);//创建一个正文行
		HSSFCell cell0 = row.createCell(0);//正文对应header下的一个单元格
		HSSFCell cell1 = row.createCell(1);//正文“第二个header”下对应的单元格
		
		HSSFCellStyle cellStyle = wk.createCellStyle();
		cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
		HSSFFont cellFont = wk.createFont();
		cellFont.setColor((short) 1);
		cellFont.setFontName("宋体");//字体类型
		cellFont.setFontHeightInPoints((short)8);//一般表头字体大小11
		cellStyle.setBorderBottom(CellStyle.BORDER_THIN);//黑色边框
		cellStyle.setBorderLeft(CellStyle.BORDER_THIN);
		cellStyle.setBorderRight(CellStyle.BORDER_THIN);
		cellStyle.setBorderTop(CellStyle.BORDER_THIN);
		cell0.setCellStyle(cellStyle);
		cell0.setCellValue(001);
		
		/************************************************/
		/*					设置背景色					*/
		/************************************************/
		HSSFCellStyle cellColor = wk.createCellStyle();
		cellColor.setFillForegroundColor(HSSFColor.PINK.index);
		cellColor.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);//充满
		
		/************************************************/
		/*				设置cell数据类型					*/
		/* 			如果不设置类型,cell0所示,最终结果为“1”	*/
		/* 		如果设置String类型,cell1所示,最终结果为“001”	*/
		/************************************************/
		HSSFDataFormat format = wk.createDataFormat();
		cellColor.setDataFormat(format.getFormat("@"));	//没有它,数字以0开头,双击该数据,0就会消失
		cell1.setCellType(HSSFCell.CELL_TYPE_STRING);
		cell1.setCellValue("001");
		
		cell1.setCellStyle(cellColor);
		
		//生成Excel
		try {
			FileOutputStream fileOut = new FileOutputStream(
					"E:\\studyInPrimb\\POI_Study\\StyleExcel.xls");
			wk.write(fileOut);
			fileOut.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * main函数测试
	 * @author longdage
	 * @param args
	 * */
	public static void main(String[] args) {
		new StyleExcel().firstExcel();
	}
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值