`
53873039oycg
  • 浏览: 841329 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

POI实现单元格带下拉框效果(Drop Down Lists)

    博客分类:
  • poi
 
阅读更多

     最近想在看下poi导出excel,先看下单元格带下拉框效果怎么实现,其他的还在慢慢研究。本文参考了

      http://poi.apache.org/spreadsheet/quick-guide.html

      http://stackoverflow.com/questions/8655185/limitation-while-generating-excel-drop-down-list-with-apache-poi

 

      直接上代码了:

      数据源如下

    

String dropDataSource = null;
		StringBuffer sb = new StringBuffer();
		for (int i = 100; i >= 20; i--) {
			sb.append(i).append(",");
		}
		sb = sb.deleteCharAt(sb.length() - 1);
		dropDataSource = sb.toString();

 

      excel 2003实现代码如下

     

public static void dropDownList42003(String dataSource, String filePath)
			throws Exception {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet realSheet = workbook.createSheet("下拉列表测试");
		String[] datas = dataSource.split("\\,");
		DVConstraint dvConstraint = DVConstraint
				.createExplicitListConstraint(datas);
		CellRangeAddressList addressList = null;
		HSSFDataValidation validation = null;
		for (int i = 0; i < 100; i++) {
			addressList = new CellRangeAddressList(i, i, 0, 0);
			validation = new HSSFDataValidation(addressList, dvConstraint);
			// 03 默认setSuppressDropDownArrow(false)
			// validation.setSuppressDropDownArrow(false);
			// validation.setShowErrorBox(true);
			validation.setShowErrorBox(false);// 取消弹出错误框
			realSheet.addValidationData(validation);
		}
		FileOutputStream stream = new FileOutputStream(filePath);
		workbook.write(stream);
		stream.close();
		addressList = null;
		validation = null;
	}

   效果为

  

  

    excel 2007实现如下

   

public static void dropDownList42007(String dataSource, String filePath)
			throws Exception {
		XSSFWorkbook workbook = new XSSFWorkbook();
		XSSFSheet sheet = workbook.createSheet("下拉列表测试");
		String[] datas = dataSource.split("\\,");
		XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
		XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
				.createExplicitListConstraint(datas);
		CellRangeAddressList addressList = null;
		XSSFDataValidation validation = null;
		for (int i = 0; i < 100; i++) {
			addressList = new CellRangeAddressList(i, i, 0, 0);
			validation = (XSSFDataValidation) dvHelper.createValidation(
					dvConstraint, addressList);
			// 07默认setSuppressDropDownArrow(true);
			// validation.setSuppressDropDownArrow(true);
			// validation.setShowErrorBox(true);
			sheet.addValidationData(validation);
		}
		FileOutputStream stream = new FileOutputStream(filePath);
		workbook.write(stream);
		stream.close();
		addressList = null;
		validation = null;
	}

   效果如下

  

 

   注意上面的数据源大小,只从100到20,到10的话,excel 2003创建报错,错误信息为

  

Exception in thread "main" java.lang.IllegalArgumentException: String literals in formulas can't be bigger than 255 characters ASCII
	at org.apache.poi.ss.formula.ptg.StringPtg.<init>(StringPtg.java:65)
	at org.apache.poi.hssf.usermodel.DVConstraint.createListFormula(DVConstraint.java:412)
	at org.apache.poi.hssf.usermodel.DVConstraint.createFormulas(DVConstraint.java:385)
	at org.apache.poi.hssf.usermodel.HSSFDataValidation.createDVRecord(HSSFDataValidation.java:195)
	at org.apache.poi.hssf.usermodel.HSSFSheet.addValidationData(HSSFSheet.java:396)

   excel 2007创建不报错,但是下拉框出不来。如果数据源很多,建议引用另一个sheet页的数据

 

    数据源如下

   

sb = new StringBuffer();
		for (int i = 200; i >= 0; i--) {
			sb.append(i).append(",");
		}
		sb = sb.deleteCharAt(sb.length() - 1);
		dropDataSource = sb.toString();

    excel 2003实现如下

   

public static void dropDownList2003(String dataSource, String filePath)
			throws Exception {
		HSSFWorkbook workbook = new HSSFWorkbook();
		HSSFSheet realSheet = workbook.createSheet("下拉列表测试");
		HSSFSheet hidden = workbook.createSheet("hidden");
		//数据源sheet页不显示
		workbook.setSheetHidden(1, true);
		String[] datas = dataSource.split("\\,");
		CellStyle style = workbook.createCellStyle();
		style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0"));
		style.setAlignment(CellStyle.ALIGN_CENTER);
		style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		HSSFRow row = null;
		HSSFCell cell = null;
		for (int i = 0, length = datas.length; i < length; i++) {
			row = hidden.createRow(i);
			cell = row.createCell(0);
			cell.setCellValue(Integer.valueOf(datas[i]));
		}
		Name namedCell = workbook.createName();
		namedCell.setNameName("hidden");
		namedCell.setRefersToFormula("hidden!A1:A" + datas.length);
		DVConstraint constraint = DVConstraint
				.createFormulaListConstraint("hidden");
		CellRangeAddressList addressList = null;
		HSSFDataValidation validation = null;
		row = null;
		cell = null;
		for (int i = 0; i < 100; i++) {
			row = realSheet.createRow(i);
			cell = row.createCell(0);
			cell.setCellStyle(style);
			addressList = new CellRangeAddressList(i, i, 0, 0);
			validation = new HSSFDataValidation(addressList, constraint);
			realSheet.addValidationData(validation);
			validation.setShowErrorBox(false);// 取消弹出错误框
		}
		FileOutputStream stream = new FileOutputStream(filePath);
		workbook.write(stream);
		stream.close();
		style = null;
		addressList = null;
		validation = null;
	}

 

    效果为

   

 

      excel 2007实现如下

     

public static void dropDownList2007(String dataSource, String filePath)
			throws Exception {
		XSSFWorkbook workbook = new XSSFWorkbook();
		XSSFSheet sheet = workbook.createSheet("下拉列表测试");
		XSSFSheet hidden = workbook.createSheet("hidden");
		//数据源sheet页不显示
		workbook.setSheetHidden(1, true);
		String[] datas = dataSource.split("\\,");
		CellStyle style = workbook.createCellStyle();
		style.setDataFormat(HSSFDataFormat.getBuiltinFormat("0"));
		style.setAlignment(CellStyle.ALIGN_CENTER);
		style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		XSSFRow row = null;
		XSSFCell cell = null;
		for (int i = 0, length = datas.length; i < length; i++) {
			row = hidden.createRow(i);
			cell = row.createCell(0);
			cell.setCellValue(Integer.valueOf(datas[i]));
		}
		Name namedCell = workbook.createName();
		namedCell.setNameName("hidden");
		namedCell.setRefersToFormula("hidden!A1:A" + datas.length);
		XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
		XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper
				.createFormulaListConstraint("hidden");
		CellRangeAddressList addressList = null;
		XSSFDataValidation validation = null;
		for (int i = 0; i < 100; i++) {
			row = sheet.createRow(i);
			cell = row.createCell(0);
			cell.setCellStyle(style);
			addressList = new CellRangeAddressList(i, i, 0, 0);
			validation = (XSSFDataValidation) dvHelper.createValidation(
					dvConstraint, addressList);
			sheet.addValidationData(validation);
		}
		FileOutputStream stream = new FileOutputStream(filePath);
		workbook.write(stream);
		stream.close();
		addressList = null;
		validation = null;
	}

  

    效果如下: 

 

   

 

   说明:如果你没有上面的效果或者报错,请检查poi架包的版本,或者使用版本高些的poi,我使用的是poi 3.10最新版。谢谢

 

    全文完

 

  • 大小: 68.3 KB
  • 大小: 61.9 KB
  • 大小: 66.5 KB
  • 大小: 64.2 KB
0
0
分享到:
评论

相关推荐

    java excel poi合并单元格

    本篇文章将深入探讨如何使用Apache POI来合并Excel工作表中的单元格,以实现标题或者表头的美化。 首先,理解Excel的单元格合并机制是至关重要的。在Excel中,合并单元格意味着多个相邻的单元格被合并成一个大的...

    Java POI下载Excel模板 Excel带有下拉框的模板

    Java POI下载Excel模板 Excel带有下拉框的模板,并有详细注释,生成exlcel的下拉框,必填项标红,数字栏位防止科学计数法,并设置Excel标题样式

    poi获取合并单元格

    1. **合并单元格**:在 Excel 中,可以通过选择相邻的多个单元格并将其合并为一个单元格来简化数据展示或实现特定布局效果。合并单元格通常会将左上角单元格的内容作为整个合并区域的内容。 2. **CellRangeAddress**...

    POI合并单元格

    java POI导出Excel文件多表头文件

    poi导出下拉列表

    本主题将深入探讨如何使用Apache POI来创建具有下拉列表功能的Excel文件,以及如何实现数据有效性约束。 首先,我们需要理解什么是数据有效性约束。在Excel中,数据有效性是一种功能,允许用户对单元格输入的数据...

    poi读取合并单元格帮助类

    在探讨“poi读取合并单元格帮助类”的知识点时,我们首先需要理解Apache POI库在Java中的作用以及如何处理Excel文件中的合并单元格。Apache POI是一个开源的API,它允许程序创建、修改和显示Microsoft Office格式的...

    POI操作Excel合并单元格边框问题解决方法

    POI操作Excel 合并单元格 边框问题解决方法,这个方法是我亲自测试,并运用于项目中的,可以放心使用,还一并写出了很多注释,其中有写poi的bug的解决方法

    POI读取Excel合并单元格并储存

    本文将深入探讨如何使用Java的Apache POI库来读取Excel文件,并处理其中合并单元格的数据,同时将这些数据存储到实体类中以供后续使用。 Apache POI是一个强大的库,允许程序员使用Java来创建、修改和显示Microsoft...

    POI 合并单元格 及 注意事项

    POI 合并单元格 及 注意事项

    Java 使用POI生成带联动下拉框的excel表格实例代码

    Java 使用POI生成带联动下拉框的excel表格实例代码 Java 是一种广泛使用的编程语言,而 POI(Poor Obfuscation Implementation)则是一个流行的 Java 库,用于读写 Microsoft Office 文件格式,包括 Excel、Word ...

    POI excel单元格顔色设定

    ### POI Excel单元格颜色设定详解 在使用Apache POI进行Excel操作时,经常会遇到需要对单元格的颜色进行设定的情况。本文将详细讲解如何利用Apache POI中的`HSSFCellStyle`类来设置单元格的前景色和背景色,并提供...

    poi获取exccel有合并单元格的数据

    ### 使用Apache POI获取含有合并单元格的Excel数据并存储为List 在处理Excel文档时,经常需要读取其中的数据并进行进一步的操作。当Excel文件中含有合并单元格时,简单的读取方法可能无法准确地获取到所有数据。...

    java使用poi在excel单元格添加超链接,设置字体颜色(csdn)————程序.pdf

    在单元格中添加超链接可以通过创建一个Hyperlink对象,并将其与单元格关联来实现。同时,你可以通过设置单元格的字体样式来改变字体颜色,使其具有超链接的特征(通常为蓝色和下划线): ```java import org.apache...

    poi导出excel生成下拉列表

    poi作为导出excel常用的工具,方便快捷。对于excel指定下拉列表的列,如何生成呢?本文提供如何生成下拉列表的excel列

    利用poi进行excel相同内容合并单元格并转成流输出

    利用poi进行excel相同内容合并单元格,只摘要了传入部分功能,请关注addMergedRegion方法

    poi生成Excel及合并单元格示例

    通过这个简单的例子,我们可以了解到如何使用 Apache POI 来生成 Excel 文件,并实现单元格的合并。在实际开发中,你可以根据需求调整单元格的样式、数据格式,甚至可以设置公式和图表等更复杂的功能。Apache POI 是...

    java_poi实现excel导入导出

    Java POI 实现 Excel 导入导出 Java POI 是一个流行的 Java 库,用于处理 Microsoft Office 文件格式,包括 Excel 文件。在本文中,我们将详细介绍如何使用 Java POI 实现 Excel 导入导出功能。 1. 什么是 Java ...

    POI处理Excel,获取特定单元格后,为其右侧相邻单元格赋值(Excel签署)

    标题中的“POI处理Excel,获取特定单元格后,为其右侧相邻单元格赋值(Excel签署)”是指使用Apache POI库在Java中操作Excel文件的过程。Apache POI是一个流行的开源项目,允许开发者读写Microsoft Office格式的文件...

    POI实现excel导入导出及解析

    本篇文章将详细探讨如何使用Apache POI来实现Excel的导入、导出以及解析功能。 一、Apache POI简介 Apache POI是开源项目,它提供了Java API来处理Microsoft Office格式的文件。它支持多种文件格式,如HSSF(用于旧...

Global site tag (gtag.js) - Google Analytics