POI--HSSFCellStyle类

               

  • 通过POI来进行单元格格式的设定

设定格式使用「HSSFCellStyle」类。它有一个构造方法:

protected HSSFCellStyle(short index, ExtendedFormatRecord rec)
虽然有构造方法,但却是protected的,所以不能直接使用,要通过一个工作簿workbook来生成格式对象。 

在POI里,格式好像是以workbook为单位来管理的,所以要先作成一个格式对象,保存在workbook里,然后再对已生成好的单元格进行设定。 


  • 在单元格里指定格式
1,要作成一个格式对象,可以使用「HSSFWorkbook」类的「createCellStyle」方法。 
public HSSFCellStyle createCellStyle()
2,要取出现有的格式对象的话,使用「HSSFWorkbook」类的「getCellStyleAt」方法,这个方法有参数,是被保存格式的INDEX号。 
public HSSFCellStyle getCellStyleAt(short idx)
3,对于某一个单元格,也可以取出它的格式对象。这时要使用「HSSFCell」类的「getCellStyle」方法。 
public HSSFCellStyle getCellStyle()
4,这样的话,不管是新创建的或者是从现有的单元格里取出来的格式对象,都可以用来对某一个单元格进行格式的设定。设定方法使用「HSSFCell」类的「setCellStyle」方法。 
public void setCellStyle(HSSFCellStyle style)
package linkin;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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;public class Linkinpublic static void main(String[] args) {  HSSFWorkbook workbook = new HSSFWorkbook();  HSSFSheet sheet = workbook.createSheet();  HSSFRow row = sheet.createRow(1);//第二行  HSSFCell cell = row.createCell(0);//2,1格  cell.setCellValue("sample");//写入sample  HSSFCellStyle style = workbook.createCellStyle();//创建个workbook的HSSFCellStyle格式对象style  //设定格式  style.setFillBackgroundColor(HSSFColor.WHITE.index);  style.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);  style.setFillPattern(HSSFCellStyle.THICK_HORZ_BANDS);  cell.setCellStyle(style);//对2,1格写入上面的格式  FileOutputStream out = null;  try  {   out = new FileOutputStream("sample.xls");   workbook.write(out);  }  catch (IOException e)  {   System.out.println(e.toString());  }  finally  {   try   {    out.close();   }   catch (IOException e)   {    System.out.println(e.toString());   }  } }}

 

  • POI单元格颜色设定
先从单元格顔色设定开始介绍。单元格的顔色有前景色和背景色。 
1,前景色的设定使用「HSSFCellStyle」类的「setFillForegroundColor」方法。 
public void setFillForegroundColor(short bg)

2,背景色的设定则使用「HSSFCellStyle」类的「setFillBackgroundColor」方法。 
public void setFillBackgroundColor(short bg)
两个方法都是通过参数来设定具体什么顔色。该参数类型为short型,在「HSSFColor」类里,准备了各种各样顔色的定义值。 


  • HSSFColor类
HSSFColor类定义如下:public class HSSFColor extends java.lang.Object 
而各种顔色又是作为HSSFColor类的子类,定义一览表如下: 
HSSFColor.AQUA    HSSFColor.BLACK
HSSFColor.BLUE     HSSFColor.BLUE_GREY
HSSFColor.BRIGHT_GREEN HSSFColor.BROWN
HSSFColor.CORAL HSSFColor.CORNFLOWER_BLUE
HSSFColor.DARK_BLUE HSSFColor.DARK_GREEN
HSSFColor.DARK_RED HSSFColor.DARK_TEAL
HSSFColor.DARK_YELLOW HSSFColor.GOLD
HSSFColor.GREEN HSSFColor.GREY_25_PERCENT
HSSFColor.GREY_40_PERCENT HSSFColor.GREY_50_PERCENT
HSSFColor.GREY_80_PERCENT HSSFColor.INDIGO
HSSFColor.LAVENDER HSSFColor.LEMON_CHIFFON
HSSFColor.LIGHT_BLUE HSSFColor.LIGHT_CORNFLOWER_BLUE
HSSFColor.LIGHT_GREEN HSSFColor.LIGHT_ORANGE
HSSFColor.LIGHT_TURQUOISE HSSFColor.LIGHT_YELLOW
HSSFColor.LIME HSSFColor.MAROON
HSSFColor.OLIVE_GREEN HSSFColor.ORANGE
HSSFColor.ORCHID HSSFColor.PALE_BLUE
HSSFColor.PINK HSSFColor.PLUM
HSSFColor.RED HSSFColor.ROSE
HSSFColor.ROYAL_BLUE HSSFColor.SEA_GREEN
HSSFColor.SKY_BLUE HSSFColor.TAN
HSSFColor.TEAL HSSFColor.TURQUOISE
HSSFColor.VIOLET HSSFColor.WHITE
HSSFColor.YELLOW
设定顔色时,用这些子类的静态常量「index」作为参数,使用方法如下: 
HSSFWorkbook workbook = new HSSFWorkbook();HSSFCellStyle style = workbook.createCellStyle();style.setFillForegroundColor(HSSFColor.LIME.index);style.setFillBackgroundColor(HSSFColor.GREEN.index);

如果这些顔色还不够你用的话,那么下面介绍怎么设定自己想要的顔色。 

  • 填充模式
1,指定填充模式的话,使用「HSSFCellStyle」类的「setFillPattern」方法。 
public void setFillPattern(short fp)

2,指定的填充模式,在「HSSFCellStyle」类里也有定义,类型为static short型,如下所示: 
值 说明
NO_FILL No background
SOLID_FOREGROUND Solidly filled
FINE_DOTS Small fine dots
ALT_BARS Wide dots
SPARSE_DOTS Sparse dots
THICK_HORZ_BANDS Thick horizontal bands
THICK_VERT_BANDS Thick vertical bands
THICK_BACKWARD_DIAG Thick backward facing diagonals
THICK_FORWARD_DIAG Thick forward facing diagonals
BIG_SPOTS Large spots
BRICKS Brick-like layout
THIN_HORZ_BANDS Thin horizontal bands
THIN_VERT_BANDS Thin vertical bands
THIN_BACKWARD_DIAG Thin backward diagonal
THIN_FORWARD_DIAG Thin forward diagonal
SQUARES Squares
DIAMONDS Diamonds
  • 实际的使用方法如下: 
HSSFWorkbook workbook = new HSSFWorkbook();HSSFCellStyle style = workbook.createCellStyle();style.setFillForegroundColor(HSSFColor.LIME.index);style.setFillBackgroundColor(HSSFColor.GREEN.index);style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
package linkin;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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;public class Linkinstatic HSSFWorkbook workbook; public static void main(String[] args) {  workbook = new HSSFWorkbook();  HSSFSheet sheet = workbook.createSheet();  HSSFRow row[] = new HSSFRow[12];  for (int i = 0; i < 12; i++)  {   row[i] = sheet.createRow(i);  }  HSSFCell cell[][] = new HSSFCell[12][4];  for (int i = 0; i < 12; i++)  {   for (int j = 0; j < 4; j++)   {    cell[i][j] = row[i].createCell((short) j);   }  }  setStyle(cell[0][0], "AQUA", HSSFColor.AQUA.index);  setStyle(cell[0][1], "BLACK", HSSFColor.BLACK.index);  setStyle(cell[0][2], "BLUE", HSSFColor.BLUE.index);  setStyle(cell[0][3], "BLUE_GREY", HSSFColor.BLUE_GREY.index);  setStyle(cell[1][0], "BRIGHT_GREEN", HSSFColor.BRIGHT_GREEN.index);  setStyle(cell[1][1], "BROWN", HSSFColor.BROWN.index);  setStyle(cell[1][2], "CORAL", HSSFColor.CORAL.index);  setStyle(cell[1][3], "CORNFLOWER_BLUE", HSSFColor.CORNFLOWER_BLUE.index);  setStyle(cell[2][0], "DARK_BLUE", HSSFColor.DARK_BLUE.index);  setStyle(cell[2][1], "DARK_GREEN", HSSFColor.DARK_GREEN.index);  setStyle(cell[2][2], "DARK_RED", HSSFColor.DARK_RED.index);  setStyle(cell[2][3], "DARK_TEAL", HSSFColor.DARK_TEAL.index);  setStyle(cell[3][0], "DARK_YELLOW", HSSFColor.DARK_YELLOW.index);  setStyle(cell[3][1], "GOLD", HSSFColor.GOLD.index);  setStyle(cell[3][2], "GREEN", HSSFColor.GREEN.index);  setStyle(cell[3][3], "GREY_25_PERCENT", HSSFColor.GREY_25_PERCENT.index);  setStyle(cell[4][0], "GREY_40_PERCENT", HSSFColor.GREY_40_PERCENT.index);  setStyle(cell[4][1], "GREY_50_PERCENT", HSSFColor.GREY_50_PERCENT.index);  setStyle(cell[4][2], "GREY_80_PERCENT", HSSFColor.GREY_80_PERCENT.index);  setStyle(cell[4][3], "INDIGO", HSSFColor.INDIGO.index);  setStyle(cell[5][0], "LAVENDER", HSSFColor.LAVENDER.index);  setStyle(cell[5][1], "LEMON_CHIFFON", HSSFColor.LEMON_CHIFFON.index);  setStyle(cell[5][2], "LIGHT_BLUE", HSSFColor.LIGHT_BLUE.index);  setStyle(cell[5][3], "LIGHT_CORNFLOWER_BLUE", HSSFColor.LIGHT_CORNFLOWER_BLUE.index);  setStyle(cell[6][0], "LIGHT_GREEN", HSSFColor.LIGHT_GREEN.index);  setStyle(cell[6][1], "LIGHT_ORANGE", HSSFColor.LIGHT_ORANGE.index);  setStyle(cell[6][2], "LIGHT_TURQUOISE", HSSFColor.LIGHT_TURQUOISE.index);  setStyle(cell[6][3], "LIGHT_YELLOW", HSSFColor.LIGHT_YELLOW.index);  setStyle(cell[7][0], "LIME", HSSFColor.LIME.index);  setStyle(cell[7][1], "MAROON", HSSFColor.MAROON.index);  setStyle(cell[7][2], "OLIVE_GREEN", HSSFColor.OLIVE_GREEN.index);  setStyle(cell[7][3], "ORANGE", HSSFColor.ORANGE.index);  setStyle(cell[8][0], "ORCHID", HSSFColor.ORCHID.index);  setStyle(cell[8][1], "PALE_BLUE", HSSFColor.PALE_BLUE.index);  setStyle(cell[8][2], "PINK", HSSFColor.PINK.index);  setStyle(cell[8][3], "PLUM", HSSFColor.PLUM.index);  setStyle(cell[9][0], "RED", HSSFColor.RED.index);  setStyle(cell[9][1], "ROSE", HSSFColor.ROSE.index);  setStyle(cell[9][2], "ROYAL_BLUE", HSSFColor.ROYAL_BLUE.index);  setStyle(cell[9][3], "SEA_GREEN", HSSFColor.SEA_GREEN.index);  setStyle(cell[10][0], "SKY_BLUE", HSSFColor.SKY_BLUE.index);  setStyle(cell[10][1], "TAN", HSSFColor.TAN.index);  setStyle(cell[10][2], "TEAL", HSSFColor.TEAL.index);  setStyle(cell[10][3], "TURQUOISE", HSSFColor.TURQUOISE.index);  setStyle(cell[11][0], "VIOLET", HSSFColor.VIOLET.index);  setStyle(cell[11][1], "WHITE", HSSFColor.WHITE.index);  setStyle(cell[11][2], "YELLOW", HSSFColor.YELLOW.index);  FileOutputStream out = null;  try  {   out = new FileOutputStream("sample.xls");   workbook.write(out);  }  catch (IOException e)  {   System.out.println(e.toString());  }  finally  {   try   {    out.close();   }   catch (IOException e)   {    System.out.println(e.toString());   }  } } public static void setStyle(HSSFCell cell, String col, short fg) {  HSSFCellStyle style = workbook.createCellStyle();  style.setFillForegroundColor(fg);  style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);  cell.setCellStyle(style);  cell.setCellValue(col); }}


上面程序只指定了「ForegroundColor」,填充模式是「SOLID_FOREGROUND」,因此顔色应该是全部充满整个单元格的




package linkin;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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;public class Linkinstatic HSSFWorkbook workbook; public static void main(String[] args) {  workbook = new HSSFWorkbook();  HSSFSheet sheet = workbook.createSheet();  HSSFRow row[] = new HSSFRow[5];  for (int i = 0; i < 5; i++)  {   row[i] = sheet.createRow(i);  }  HSSFCell cell[][] = new HSSFCell[5][4];  for (int i = 0; i < 5; i++)  {   for (int j = 0; j < 4; j++)   {    cell[i][j] = row[i].createCell((short) j);   }  }  setStyle(cell[0][0], "NO_FILL", HSSFCellStyle.NO_FILL);  setStyle(cell[0][1], "SOLID_FOREGROUND", HSSFCellStyle.SOLID_FOREGROUND);  setStyle(cell[0][2], "FINE_DOTS", HSSFCellStyle.FINE_DOTS);  setStyle(cell[0][3], "ALT_BARS", HSSFCellStyle.ALT_BARS);  setStyle(cell[1][0], "SPARSE_DOTS", HSSFCellStyle.SPARSE_DOTS);  setStyle(cell[1][1], "THICK_HORZ_BANDS", HSSFCellStyle.THICK_HORZ_BANDS);  setStyle(cell[1][2], "THICK_VERT_BANDS", HSSFCellStyle.THICK_VERT_BANDS);  setStyle(cell[1][3], "THICK_BACKWARD_DIAG", HSSFCellStyle.THICK_BACKWARD_DIAG);  setStyle(cell[2][0], "THICK_FORWARD_DIAG", HSSFCellStyle.THICK_FORWARD_DIAG);  setStyle(cell[2][1], "BIG_SPOTS", HSSFCellStyle.BIG_SPOTS);  setStyle(cell[2][2], "BRICKS", HSSFCellStyle.BRICKS);  setStyle(cell[2][3], "THIN_HORZ_BANDS", HSSFCellStyle.THIN_HORZ_BANDS);  setStyle(cell[3][0], "THIN_VERT_BANDS", HSSFCellStyle.THIN_VERT_BANDS);  setStyle(cell[3][1], "THIN_BACKWARD_DIAG", HSSFCellStyle.THIN_BACKWARD_DIAG);  setStyle(cell[3][2], "THIN_FORWARD_DIAG", HSSFCellStyle.THIN_FORWARD_DIAG);  setStyle(cell[3][3], "SQUARES", HSSFCellStyle.SQUARES);  setStyle(cell[4][0], "DIAMONDS", HSSFCellStyle.DIAMONDS);  FileOutputStream out = null;  try  {   out = new FileOutputStream("sample.xls");   workbook.write(out);  }  catch (IOException e)  {   System.out.println(e.toString());  }  finally  {   try   {    out.close();   }   catch (IOException e)   {    System.out.println(e.toString());   }  } } public static void setStyle(HSSFCell cell, String fps, short fp) {  HSSFCellStyle style = workbook.createCellStyle();  style.setFillForegroundColor(HSSFColor.WHITE.index);  style.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);  style.setFillPattern(fp);  cell.setCellStyle(style);  cell.setCellValue(fps); }}

上面固定了「ForegroundColor」和「BackgroundColor」,而填充模式则做了各种尝试


  • POI设置边框
在做一个电子表格时,边框的设置有时是必不可少的。这一节就来介绍边框,设置时,可以指定边框的位置,边框的种类,边框的顔色。 首先是边框的位置和种类。对单元格设置边框时,有上下左右位置之分,所以POI也准备了四个不同的方法。 
上部的边框: public void setBorderTop(short border)
下部的边框: public void setBorderBottom(short border)
左侧的边框: public void setBorderLeft(short border)
右侧的边框: public void setBorderRight(short border)

参数通过表示边框种类的short型值来指定。下面是定义在「HSSFCellStyle」类里可以被指定值的一览表。 
值 说明
BORDER_DASH_DOT dash-dot border
BORDER_DASH_DOT_DOT dash-dot-dot border
BORDER_DASHED dash border
BORDER_DOTTED dot borderhair-line border
BORDER_DOUBLE double-line border
BORDER_HAIR hair-line border
BORDER_MEDIUM Medium border
BORDER_MEDIUM_DASH_DOT medium dash-dot border
BORDER_MEDIUM_DASH_DOT_DOT medium dash-dot-dot border
BORDER_MEDIUM_DASHED Medium dashed border
BORDER_NONE No border
BORDER_SLANTED_DASH_DOT slanted dash-dot border
BORDER_THICK Thick border
BORDER_THIN Thin border


比如要在单元格下边框设置两重线的边框时,按如下方法: 

HSSFWorkbook workbook = new HSSFWorkbook();HSSFCellStyle style = workbook.createCellStyle();style.setBorderRight(HSSFCellStyle.BORDER_THIN);

下面再看看指定边框顔色。同样也分为上下左右边框来操作。 
上部的边框: public void setTopBorderColor(short color)
下部的边框: public void setBottomBorderColor(short color)
左侧的边框: public void setLeftBorderColor(short color)
右侧的边框: public void setRightBorderColor(short color)

仍然是通过参数来指定顔色,而且使用方法和前面一节也是一样。具体如下: 
HSSFWorkbook workbook = new HSSFWorkbook();HSSFCellStyle style = workbook.createCellStyle();style.setRightBorderColor(HSSFColor.RED.index);style.setBorderRight(HSSFCellStyle.BORDER_THIN);

package linkin;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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;public class Linkinpublic static void main(String[] args) {  HSSFWorkbook workbook = new HSSFWorkbook();  HSSFSheet sheet = workbook.createSheet();  HSSFRow row = sheet.createRow(1);  HSSFCell cell1 = row.createCell((short) 1);  HSSFCell cell2 = row.createCell((short) 2);  HSSFCellStyle style1 = workbook.createCellStyle();  style1.setBorderTop(HSSFCellStyle.BORDER_DOUBLE);  style1.setBorderLeft(HSSFCellStyle.BORDER_DOUBLE);  style1.setTopBorderColor(HSSFColor.GOLD.index);  style1.setLeftBorderColor(HSSFColor.PLUM.index);  cell1.setCellStyle(style1);  HSSFCellStyle style2 = workbook.createCellStyle();  style2.setBorderBottom(HSSFCellStyle.BORDER_DOUBLE);  style2.setBorderRight(HSSFCellStyle.BORDER_DOUBLE);  style2.setBottomBorderColor(HSSFColor.ORANGE.index);  style2.setRightBorderColor(HSSFColor.SKY_BLUE.index);  cell2.setCellStyle(style2);  cell1.setCellValue("U & L");  cell2.setCellValue("B & R");  FileOutputStream out = null;  try  {   out = new FileOutputStream("sample.xls");   workbook.write(out);  }  catch (IOException e)  {   System.out.println(e.toString());  }  finally  {   try   {    out.close();   }   catch (IOException e)   {    System.out.println(e.toString());   }  } }}

上面程序既改了顔色,也设置了上和左的边框各一个,右和下的边框各一个。 



package linkin;import java.io.FileOutputStream;import java.io.IOException;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFCellStyle;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;public class Linkinstatic HSSFWorkbook workbook; public static void main(String[] args) {  workbook = new HSSFWorkbook();  HSSFSheet sheet = workbook.createSheet();  HSSFRow row[] = new HSSFRow[5];  for (int i = 0; i < 5; i++)  {   row[i] = sheet.createRow(i);  }  HSSFCell cell[][] = new HSSFCell[5][3];  for (int i = 0; i < 5; i++)  {   for (int j = 0; j < 3; j++)   {    cell[i][j] = row[i].createCell((short) j);   }  }  setStyle(cell[0][0], "DASH_DOT", HSSFCellStyle.BORDER_DASH_DOT);  setStyle(cell[0][1], "DASH_DOT_DOT", HSSFCellStyle.BORDER_DASH_DOT_DOT);  setStyle(cell[0][2], "DASHED", HSSFCellStyle.BORDER_DASHED);  setStyle(cell[1][0], "DOTTED", HSSFCellStyle.BORDER_DOTTED);  setStyle(cell[1][1], "DOUBLE", HSSFCellStyle.BORDER_DOUBLE);  setStyle(cell[1][2], "HAIR", HSSFCellStyle.BORDER_HAIR);  setStyle(cell[2][0], "MEDIUM", HSSFCellStyle.BORDER_MEDIUM);  setStyle(cell[2][1], "MEDIUM_DASH_DOT", HSSFCellStyle.BORDER_MEDIUM_DASH_DOT);  setStyle(cell[2][2], "MEDIUM_DASH_DOT_DOT", HSSFCellStyle.BORDER_MEDIUM_DASH_DOT_DOT);  setStyle(cell[3][0], "MEDIUM_DASHED", HSSFCellStyle.BORDER_MEDIUM_DASHED);  setStyle(cell[3][1], "NONE", HSSFCellStyle.BORDER_NONE);  setStyle(cell[3][2], "SLANTED_DASH_DOT", HSSFCellStyle.BORDER_SLANTED_DASH_DOT);  setStyle(cell[4][0], "THICK", HSSFCellStyle.BORDER_THICK);  setStyle(cell[4][1], "THIN", HSSFCellStyle.BORDER_THIN);  FileOutputStream out = null;  try  {   out = new FileOutputStream("sample.xls");   workbook.write(out);  }  catch (IOException e)  {   System.out.println(e.toString());  }  finally  {   try   {    out.close();   }   catch (IOException e)   {    System.out.println(e.toString());   }  } } public static void setStyle(HSSFCell cell, String bn, short border) {  HSSFCellStyle style = workbook.createCellStyle();  style.setBorderBottom(border);  style.setBottomBorderColor(HSSFColor.ORANGE.index);  cell.setCellStyle(style);  cell.setCellValue(bn); }}



           
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用POI导出合并单元格的工具示例代码: ```java public class ExcelUtil { /** * 导出Excel * @param response HttpServletResponse * @param fileName 文件名 * @param title 标题 * @param headers 表头 * @param dataset 数据集合 * @throws IOException */ public static void exportExcel(HttpServletResponse response, String fileName, String title, String[] headers, Collection<?> dataset) throws IOException { OutputStream out = null; try { // 创建工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表 HSSFSheet sheet = workbook.createSheet(title); // 设置表格默认列宽度为15个字符 sheet.setDefaultColumnWidth(15); // 创建标题行 HSSFRow row = sheet.createRow(0); HSSFCell cellTitle = row.createCell(0); // 合并单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, headers.length - 1)); // 设置标题样式 HSSFCellStyle titleStyle = getTitleStyle(workbook); cellTitle.setCellStyle(titleStyle); cellTitle.setCellValue(title); // 创建表头行 row = sheet.createRow(1); // 设置表头样式 HSSFCellStyle headerStyle = getHeaderStyle(workbook); for (int i = 0; i < headers.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellStyle(headerStyle); cell.setCellValue(headers[i]); } // 创建数据行 Iterator<?> it = dataset.iterator(); int index = 2; while (it.hasNext()) { row = sheet.createRow(index); Object t = it.next(); Field[] fields = t.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { HSSFCell cell = row.createCell(i); cell.setCellValue(getFieldValueByName(fields[i].getName(), t)); } index++; } // 输出Excel文件 response.setContentType("application/vnd.ms-excel"); response.setHeader("Content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8")); out = response.getOutputStream(); workbook.write(out); } catch (Exception e) { e.printStackTrace(); } finally { if (out != null) { out.close(); } } } /** * 根据属性名获取属性值 * @param fieldName 属性名 * @param o 对象 * @return 属性值 */ private static Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + fieldName.substring(1); Method method = o.getClass().getMethod(getter, new Class[] {}); Object value = method.invoke(o, new Object[] {}); return value; } catch (Exception e) { return null; } } /** * 获取标题样式 * @param workbook 工作簿 * @return 标题样式 */ private static HSSFCellStyle getTitleStyle(HSSFWorkbook workbook) { HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); HSSFFont font = workbook.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 16); font.setBold(true); style.setFont(font); return style; } /** * 获取表头样式 * @param workbook 工作簿 * @return 表头样式 */ private static HSSFCellStyle getHeaderStyle(HSSFWorkbook workbook) { HSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); style.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); style.setFillPattern(FillPatternType.SOLID_FOREGROUND); HSSFFont font = workbook.createFont(); font.setFontName("宋体"); font.setFontHeightInPoints((short) 12); font.setBold(true); style.setFont(font); return style; } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值