欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

poi合并单元格

程序员文章站 2022-03-04 13:48:51
...

POI进行跨行需要用到对象HSSFSheet对象,现在就当我们程序已经定义了一个HSSFSheet对象sheet。

跨第1行第1个到第2个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,0,(short)1));

跨第1行第1个到第2行第1个单元格的操作为
sheet.addMergedRegion(new Region(0,(short)0,1,(short)0));

重点注意事项:
1.单元格CELL和ROW对象下标都是从0开始的。
2.单元格合并时Region(1,2,3,4)第1个值的行号必须要比3位置的行号小,如果大于3就不能正常合并单元格
3.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。

package com.cz.test;

import java.io.FileOutputStream;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;

import javax.swing.JOptionPane;

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.Region;

import com.cz.util.SqlHelper;

public class ExcelExport2 {
	
	public static void resultSetToExcel(ResultSet rs, String xlsName,
			String sheetName) throws Exception {
		// 第一步,创建一个webbook,对应一个Excel文件
		HSSFWorkbook wb = new HSSFWorkbook();
		// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
		HSSFSheet sheet = wb.createSheet("学生表一");
		// 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short
		HSSFRow row = sheet.createRow((int) 0);
		// 第四步,创建单元格,并设置值表头 设置表头居中
		HSSFCellStyle style = wb.createCellStyle();
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式
		HSSFCell cell;
		ResultSetMetaData md = rs.getMetaData();
		int nColumn = md.getColumnCount();
		// 写入各个字段的名称
		for (int i = 1; i <= nColumn; i++) {
			sheet.addMergedRegion(new Region(0,(short)0,1,(short)0)); 
			cell = row.createCell((short) (i - 1));
			cell.setCellType(HSSFCell.CELL_TYPE_STRING);
			cell.setCellValue(md.getColumnLabel(i));
		}

		int iRow = 2;
		// 写入各条记录,每条记录对应Excel中的一行
		while (rs.next()) {
			row = sheet.createRow((short) iRow);
			for (int j = 1; j <= nColumn; j++) {
				cell = row.createCell((short) (j - 1));
				cell.setCellType(HSSFCell.CELL_TYPE_STRING);
				cell.setCellValue(rs.getObject(j).toString());
			}
			iRow++;
		}
		FileOutputStream fOut = new FileOutputStream(xlsName);
		wb.write(fOut);
		fOut.flush();
		fOut.close();
		JOptionPane.showMessageDialog(null, "导出数据成功!");
	}

	public static void main(String[] args) {
		String sql="select * from dept";
		ResultSet rs=SqlHelper.executeQuery(sql, null);
		try {
			resultSetToExcel(rs, "F:\\dept.xls","sheetName");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}