Java导出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 时,动态表头的实现方式可以有很多种。 一种常见方式是,在导出 Excel 前就确定好表头的内容,并且将表头内容存储在一个数组或者列表里。根据这个数组或列表,我们可以动态地设置 Excel表头。 另一种方式是,在导出 Excel 时根据数据动态生成表头。这通常需要对数据进行预处理或者整理,以确定 Excel 表头的内容。 无论采用哪种方式,Java 导出 Excel 的核心思路是基于 POI 库。POI 是一个开源的 Java Excel API,它允许我们在 Java 应用程序中创建、读取和修改 Excel 文件。 具体实现时,可以使用 POI 提供的 XSSFWorkbook、Sheet 和 Row 等类和方法,来创建 Excel 表头和单元格,并填充数据。同时,还可以通过设置单元格和单元格样式,来实现格式控制和美化。 在其中一个实现方式中,代码大概会长这个样子: // 创建一个新的 Excel 工作簿 XSSFWorkbook workbook = new XSSFWorkbook(); // 创建一个新的 Sheet XSSFSheet sheet = workbook.createSheet("Sheet1"); // 创建表头内容数组 String[] headers = {"序号", "姓名", "年龄", "性别"}; // 创建表头行 XSSFRow headerRow = sheet.createRow(0); for (int i = 0; i < headers.length; i++) { // 创建单元格并设置表头内容 XSSFCell cell = headerRow.createCell(i); cell.setCellValue(headers[i]); // 设置单元格样式 XSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); cell.setCellStyle(style); } // 填充数据 for (int i = 0; i < dataList.size(); i++) { // 创建数据行 XSSFRow dataRow = sheet.createRow(i + 1); // 获取数据对象 Data data = dataList.get(i); // 创建单元格并设置数据内容 XSSFCell cell0 = dataRow.createCell(0); cell0.setCellValue(data.getId()); XSSFCell cell1 = dataRow.createCell(1); cell1.setCellValue(data.getName()); XSSFCell cell2 = dataRow.createCell(2); cell2.setCellValue(data.getAge()); XSSFCell cell3 = dataRow.createCell(3); cell3.setCellValue(data.getSex()); // 设置单元格样式 XSSFCellStyle style = workbook.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); cell0.setCellStyle(style); cell1.setCellStyle(style); cell2.setCellStyle(style); cell3.setCellStyle(style); } // 将工作簿写入硬盘中 FileOutputStream outputStream = new FileOutputStream("data.xlsx"); workbook.write(outputStream); outputStream.close(); 总的来说,Java 导出 Excel 动态表头的实现方式多种多样,可以根据需求和场景来选择合适的方式。但无论采用哪种方式,核心思路都要基于 POI 库来进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值