Java Excel省市区级联菜单设置

本文详细介绍了如何使用Java的POI库来创建Excel文件,特别是针对2003和2007版本,包括字体样式设置、单元格数据校验以及省市区级联菜单的实现。通过对象模型,如Font、Style和DataValidationConstraint,实现了Excel的定制化操作。
摘要由CSDN通过智能技术生成

主要解决使用POI写excel,并且添加数据校验,以及省市区级联菜单设置,分Excel2003与Excel2007两个版本。

关于POI与Excel之间的一些关系,以及设计方面的一些思想说明:

      Java是一个面向对象的语言,在Java中用对象表达所有的事物,用对象来描述事物之间的关系。一个Excel文件其实可以分解成很多的对象,例如整个Excel就是一个大对象,然后分解之后可以看作是一个个SHEET对象组合起来的,接着SHEET对象又是由行对象ROW组合起来的,行对象又是由CELL对象组合起来的,等等。

      如果你想设置字体或者样式,那么有字体Font对象,将字体应用到单元格上,那么那个单元格就会使用什么字体了, 还有样式例如单元格边框,或者说前景色等就是样式对象Style控制的。

      如果你想加一点校验,这又该怎么解决呢?excel那么多单元格总不能全部添加同一种规则吧,所以需要一个表示范围的对象。即规则应用范围对象:CellRangeAddressList。范围有了,但是规则呢?所以还需要一个规则对象:DataValidationConstraint。我们将范围与规则组合在一起,应用到某个Sheet页上就完成了某一个Sheet页,指定单元格的数据校验了。

下面给了一个简答的示例图,可以帮助理解,该图对应是的2003版本的excel:


1、关于如何使用POI写2007的Excel

      以下主要介绍关于如何设置字体样式,单个单元格的数据校验,以及省市区级联菜单的设置。
1.1、Excel2007字体样式的设置
@Test
// 关于2007版本的样式设置
public void testSetStyle2007() {
	// 创建一个excel
	Workbook book = new XSSFWorkbook();
	// 在创建的excel上新建一个工作表,创建行,创建一个单元格,并设置单元格的值
	Sheet sheet = book.createSheet("第一张工作表");
	// 设置列宽,第一个参数代表列id(从0开始),第2个参数代表宽度值 参考 :"2012-08-10"的宽度为2500
	sheet.setColumnWidth(1, 7000);
	
	Row row = sheet.createRow(0);
	
	// 获取样式
	CellStyle style = book.createCellStyle();
	// 一、设置背景色:
	style.setFillForegroundColor((short)13);// 设置背景色
	style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
	
	// 二、设置边框:
	style.setBorderBottom(HSSFCellStyle.BORDER_THIN); // 下边框
	style.setBorderLeft(HSSFCellStyle.BORDER_THIN);// 左边框
	style.setBorderTop(HSSFCellStyle.BORDER_THIN);// 上边框
	style.setBorderRight(HSSFCellStyle.BORDER_THIN);// 右边框
	
	// 三、设置居中:
	style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 居中
	
	// 设置字体 1
	Font font = book.createFont();
	font.setFontName("微软雅黑");
	font.setFontHeightInPoints((short)10);// 设置字体大小
	
	style.setFont(font);// 选择需要用到的字体格式
	
	// 设置字体 2
	Font font2 = book.createFont();
	font2.setFontName("微软雅黑");
	font2.setColor(Font.COLOR_RED);
	font2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 粗体显示
	font2.setFontHeightInPoints((short)12);
	
	// 如果单元格只有部分字体需要格式
	Cell cell = row.createCell(0);
	RichTextString text = new XSSFRichTextString("*社区名称");
	text.applyFont(0, 1, font2); // 0, 1 表示应用字体的范围
	cell.setCellValue(text); // 设置单元格的值
	
	// 将style应用到整个单元格
	cell = row.createCell(1);
	cell.setCellStyle(style);
	cell.setCellValue("管理面积(平方米)");
	
	FileOutputStream os = null;
	try {
		os = new FileOutputStream("D:/testSetStyle2007.xlsx");
		book.write(os);
	} catch (Exception e) {
		e.printStackTrace();
	} finally {
		IOUtils.closeQuietly(os);
	}
}
      上面给出了关于2007版本中字体样式的的设置,如果仅仅只是想一部分应用样式,则可以使用RichTextString类。具体效果如下图:

1.2、Excel2007单元格数据校验
      单元格的数据校验分为两种,第一种为下拉式的给定范围,输入只能是范围中的选项。另外一种为数据校验,例如时间只能是某个范围内的,或者说数据只能是整数小数等。
@Test
// 单个单元格校验
public void testConstraintExcel2007() {
	Workbook book = new XSSFWorkbook();
	Sheet sheet = book.createSheet("第一张工作表");
	
	XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper((XSSFSheet)sheet);
	
	// 这里校验值准入输入0-100之间整数
	// 规则
	DataValidationConstraint dvConstraint = dvHelper.createIntegerConstraint(OperatorType.BETWEEN, "0", "100");
	
	// 范围
	CellRangeAddressList rangeAddressList = new CellRangeAddressList(0, 
  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值