Java导出Excel三表头

本文介绍了一种使用Java和Apache POI库创建带有多个表头的Excel文件的方法。通过示例代码展示了如何设置多级表头并进行单元格合并,最终生成了一个包含不同学院、班级及学期成绩的复杂表格。

1、问题背景

Java导出Excel表格时,表头出现了三个,即多表头Excel


2、实现源码

/**
 * 
 * @Project:Report
 * @Title:ThreeHead.java
 * @Package:com.you.excel
 * @Description:
 * @Author:YouHaiDong
 * @Date:2015年11月4日 下午3:10:12
 * @Version:
 */
package com.you.excel;

import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
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.Region;

/**
 * <p>导出三表头Excel</p>
 * @ClassName:ThreeHead
 * @Description:
 * @Author:YouHaiDong
 * @Date:2015年11月4日 下午3:10:12
 * 
 */
public class ThreeHead 
{
	/**
	 * 导出三表头表格
	 * @Title:ThreeHead
	 * @Description:
	 * @param args
	 * @Date:2015年11月4日 下午3:10:12
	 * @return: void 
	 * @throws Exception
	 */
	@SuppressWarnings({ "resource", "deprecation" })
	public static void main(String[] args) throws Exception
	{
		//创建workbook 
		HSSFWorkbook workbook = new HSSFWorkbook(); 
		//创建sheet页
	    HSSFSheet sheet = workbook.createSheet("学生表"); 
		//创建单元格
		HSSFRow row = sheet.createRow(0); 
		HSSFCell c0 = row.createCell(0); 
		c0.setCellValue(new HSSFRichTextString("年份")); 
		HSSFCell c1 = row.createCell(1); 
		c1.setCellValue(new HSSFRichTextString("计算机学院")); 
		HSSFCell c2 = row.createCell(7); 
		c2.setCellValue(new HSSFRichTextString("物流学院")); 
		HSSFCell c3 = row.createCell(13); 
		c3.setCellValue(new HSSFRichTextString("行政学院")); 
		HSSFRow row1 = sheet.createRow(1); 
		HSSFCell c6 = row1.createCell(1); 
		c6.setCellValue(new HSSFRichTextString("一班")); 
		HSSFCell c7 = row1.createCell(3); 
		c7.setCellValue(new HSSFRichTextString("二班")); 
		HSSFCell c8 = row1.createCell(5); 
		c8.setCellValue(new HSSFRichTextString("三班"));
		HSSFCell c9 = row1.createCell(7); 
		c9.setCellValue(new HSSFRichTextString("一班")); 
		HSSFCell c10 = row1.createCell(9); 
		c10.setCellValue(new HSSFRichTextString("二班")); 
		HSSFCell c11 = row1.createCell(11); 
		c11.setCellValue(new HSSFRichTextString("三班"));
		HSSFCell c12 = row1.createCell(13); 
		c12.setCellValue(new HSSFRichTextString("一班")); 
		HSSFCell c13 = row1.createCell(15); 
		c13.setCellValue(new HSSFRichTextString("二班")); 
		HSSFCell c14 = row1.createCell(17); 
		c14.setCellValue(new HSSFRichTextString("三班"));
		HSSFRow row2 = sheet.createRow(2); 
		HSSFCell c15 = row2.createCell(1); 
		c15.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c16 = row2.createCell(2); 
		c16.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c17 = row2.createCell(3); 
		c17.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c18 = row2.createCell(4); 
		c18.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c19 = row2.createCell(5); 
		c19.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c20 = row2.createCell(6); 
		c20.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c21 = row2.createCell(7); 
		c21.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c22 = row2.createCell(8); 
		c22.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c23 = row2.createCell(9); 
		c23.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c24 = row2.createCell(10); 
		c24.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c25 = row2.createCell(11); 
		c25.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c26 = row2.createCell(12); 
		c26.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c27 = row2.createCell(13); 
		c27.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c28 = row2.createCell(14); 
		c28.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c29 = row2.createCell(15); 
		c29.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c30 = row2.createCell(16); 
		c30.setCellValue(new HSSFRichTextString("下学期"));
		HSSFCell c31 = row2.createCell(17); 
		c31.setCellValue(new HSSFRichTextString("上学期"));
		HSSFCell c32 = row2.createCell(18); 
		c32.setCellValue(new HSSFRichTextString("下学期"));
		
		Region region1 = new Region(0, (short)0, 2, (short)0); 
		Region region2 = new Region(0, (short)1, 0, (short)6); 
		Region region3 = new Region(0, (short)7, 0, (short)12); 
		Region region4 = new Region(0, (short)13, 0, (short)18); 
		Region region5 = new Region(1, (short)1, 1, (short)2); 
		Region region6 = new Region(1, (short)3, 1, (short)4); 
		Region region7 = new Region(1, (short)5, 1, (short)6); 
		Region region8 = new Region(1, (short)7, 1, (short)8); 
		Region region9 = new Region(1, (short)9, 1, (short)10); 
		Region region10 = new Region(1, (short)11, 1, (short)12); 
		Region region11 = new Region(1, (short)13, 1, (short)14); 
		Region region12 = new Region(1, (short)15, 1, (short)16); 
		Region region13 = new Region(1, (short)17, 1, (short)18); 
		
		sheet.addMergedRegion(region1); 
		sheet.addMergedRegion(region2); 
		sheet.addMergedRegion(region3); 
		sheet.addMergedRegion(region4); 
		sheet.addMergedRegion(region5); 
		sheet.addMergedRegion(region6); 
		sheet.addMergedRegion(region7); 
		sheet.addMergedRegion(region8); 
		sheet.addMergedRegion(region9); 
		sheet.addMergedRegion(region10); 
		sheet.addMergedRegion(region11); 
		sheet.addMergedRegion(region12); 
		sheet.addMergedRegion(region13); 
		
		FileOutputStream stream = new FileOutputStream("d:/student.xls"); 
		workbook.write(stream);
	}

}

3、实现结果


在使用 Java 导出 Excel 文件并自定义表头样式时,通常可以通过 Apache POI 或 EasyExcel 等工具实现。Apache POI 提供了丰富的 API 来操作 Excel 文件,包括设置字体、背景颜色、边框等样式[^2]。以下是一个基于 Apache POI 的实现方式: ### 创建样式并应用到表头 首先,创建一个 `HSSFCellStyle` 对象,并设置字体、背景颜色、边框等属性。然后将该样式应用到表头单元格。 ```java // 创建工作簿 HSSFWorkbook workbook = new HSSFWorkbook(); // 创建工作表 HSSFSheet sheet = workbook.createSheet("统计表"); // 创建样式 HSSFCellStyle headerStyle = workbook.createCellStyle(); // 设置背景颜色 headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex()); headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 设置边框 headerStyle.setBorderTop(BorderStyle.THIN); headerStyle.setBorderBottom(BorderStyle.THIN); headerStyle.setBorderLeft(BorderStyle.THIN); headerStyle.setBorderRight(BorderStyle.THIN); // 设置对齐方式 headerStyle.setAlignment(HorizontalAlignment.CENTER); headerStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 创建字体 HSSFFont font = workbook.createFont(); font.setBold(true); font.setColor(IndexedColors.WHITE.getIndex()); // 应用字体到样式 headerStyle.setFont(font); // 创建行 HSSFRow row = sheet.createRow(0); // 创建单元格并应用样式 HSSFCell cell = row.createCell(0); cell.setCellValue("序号"); cell.setCellStyle(headerStyle); ``` ### 自定义表头格式 如果需要实现更复杂的表头格式,例如合并单元格或者设置不同的字体样式,可以使用 `CellRangeAddress` 类来合并单元格,并为不同的单元格应用不同的样式。 ```java // 合并单元格 CellRangeAddress region = new CellRangeAddress(0, 0, 0, 1); sheet.addMergedRegion(region); // 创建行 HSSFRow row = sheet.createRow(0); // 创建单元格并应用样式 HSSFCell cell1 = row.createCell(0); cell1.setCellValue("主标题"); cell1.setCellStyle(headerStyle); HSSFCell cell2 = row.createCell(1); cell2.setCellValue("子标题"); cell2.setCellStyle(headerStyle); ``` ### 使用 EasyExcel 实现自定义表头 EasyExcel 是一个简化 Excel 操作的库,它提供了更简洁的 API 来处理 Excel 文件。通过定义一个类来表示表头,并使用注解来指定样式,可以轻松实现自定义表头。 ```java public class DemoData { @ExcelProperty(value = "姓名", index = 0) private String name; @ExcelProperty(value = "年龄", index = 1) private int age; // Getter and Setter } // 写入数据 EasyExcel.write(fileName, DemoData.class).sheet("Sheet1").doWrite(dataList); ``` 通过上述方法,可以灵活地控制 Excel 文件的表头样式,满足不同的业务需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值