java excel 下拉框联动_Java POI生成带有下拉框&级联下拉框的Excel

这篇博客介绍了如何使用Apache POI库在Java中生成带有下拉框和级联下拉框的Excel文件。文章详细讲解了关键步骤,包括数据写入隐藏sheet、下拉数据映射、数据验证规则创建等,并提供了完整的代码示例。通过这些方法,可以创建出交互式的Excel模板。

Apache POI在生成excel文件方面比其他工具较为强大,把在项目中用到的东西记录下来。由于之前没有用过poi,所以期间耗费了一些时间收集资料和看api。在此特地记录下来,希望能帮助你。

在这里只指出关键点,完整源码请根据下方提供的git地址查看。

本文示例使用poi版本: poi-3.10-FINAL-20140208 。

先把下拉框数据写入隐藏sheet页中,写的同时进行下拉数据与所要级联的下拉数据进行“名称”映射(注意:excel“名称”不能以数字开头,且不能包含特殊字符)

/**

* 初始化仓库&货架下拉框数据

*

* @param workbook

* @param wsSheet

* @param warehouses

* @param warehousesAndShelves

*/

private static void initWarehousesAndShelves(HSSFWorkbook workbook, HSSFSheet wsSheet, List warehouses, Map> warehousesAndShelves) {

writeWarehouses(workbook, wsSheet, warehouses);

writeShelves(workbook, wsSheet, warehouses, warehousesAndShelves);

initWarehouseNameMapping(workbook, wsSheet.getSheetName(), warehouses.size());

}

/**

* 生成下拉框之前的准备:根据公式生成下拉框验证规则及提示

*

* @param formulaString

* @param columnIndex

* @return

*/

public static DataValidation getDataValidationByFormula(String formulaString, int columnIndex) {

// 加载下拉列表内容

DVConstraint constraint = DVConstraint.createFormulaListConstraint(formulaString);

// 设置数据有效性加载在哪个单元格上。

// 四个参数分别是:起始行、终止行、起始列、终止列

CellRangeAddressList regions = new CellRangeAddressList(1, XLS_MAX_ROW, columnIndex, columnIndex);

// 数据有效性对象

DataValidation dataValidationList = new HSSFDataValidation(regions, constraint);

dataValidationList.createErrorBox("Error", "请选择或输入有效的选项,或下载最新模版重试!");

String promptText = initPromptText(columnIndex);

dataValidationList.createPromptBox("", promptText);

return dataValidationList;

}

/**

* 在主sheet中初始化下拉框

*

* @param mainSheet

*/

private static void initSheetNameMapping(HSSFSheet mainSheet) {

DataValidation warehouseValidation = getDataValidationByFormula(WAREHOUSE_NAMES, 3);

DataValidation shelfValidation = getDataValidationByFormula("INDIRECT($D1)", 4); //formula同"INDIRECT(INDIRECT(\"R\"&ROW()&\"C\"&(COLUMN()-1),FALSE))"

DataValidation deviceValidation = getDataValidationByFormula(DEVICE_NAMES, 0);

DataValidation deviceTypeValidation = getDataValidationByFormula(DEVICE_TYPE_NAMES, 1);

// 主sheet添加验证数据

mainSheet.addValidationData(warehouseValidation);

mainSheet.addValidationData(shelfValidation);

mainSheet.addValidationData(deviceValidation);

mainSheet.addValidationData(deviceTypeValidation);

}

注意: 级联下拉框包含被级联项和及联项(选择前者后可供选择的下拉项),前者由于excel“名称”的限制,不能以数字开头,也不能包含特殊字符。

给出效果图:

be2f1af3af92?from=singlemessage

excel.gif

源码详见:https://github.com/hzhqk/java/blob/master/poi/excel%20template/ExcelTemplate.java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值