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();
}
}