java 下拉框数组_java - Web开发 - POI导出带有下拉框的Excel和解决下拉中数组过多而产生的异常...

曾经蜡笔没有小新2017-05-17 10:02:251楼

下面是解决办法:

/**

* Excel API

*/

@SuppressWarnings("resource")

HSSFWorkbook book = new HSSFWorkbook();

HSSFSheet sheet = book.createSheet("spu导入模板");

/**

* 初始化参数

*/

Map map = new HashMap(); // 查询时用的map

List list = null;

String[] strs = null; // 用于下拉的数组

String hiddenSheet = null;

int cellNum = 0;

int startRow = 1; // 开始行

int endRow = 100; // 结束行

DVConstraint constraint = null;

CellRangeAddressList addressList = null;

HSSFDataValidation validation = null; // 数据验证

map.put("namespace", "xxxxxxx.xxxxx"); // 查询

list = commonQueryService.queryList(map);

strs = StringUtil.mapListToStrs(list);

hiddenSheet = "category1Hidden";

cellNum = SpuEnu.CATEGORY_1.getNumber();

HSSFSheet category1Hidden = book.createSheet(hiddenSheet); // 创建隐藏域

for (int i = 0, length = strs.length; i < length; i++) { // 循环赋值(为了防止下拉框的行数与隐藏域的行数相对应来获取>=选中行数的数组,将隐藏域加到结束行之后)

category1Hidden.createRow(endRow + i).createCell(cellNum).setCellValue(strs[i]);

}

Name category1Name = book.createName();

category1Name.setNameName(hiddenSheet);

category1Name.setRefersToFormula(hiddenSheet + "!A1:A" + (strs.length + endRow)); // A1:A代表隐藏域创建第?列createCell(?)时。以A1列开始A行数据获取下拉数组

constraint = DVConstraint.createFormulaListConstraint(hiddenSheet);

addressList = new CellRangeAddressList(startRow, endRow, cellNum, cellNum);

validation = new HSSFDataValidation(addressList, constraint);

book.setSheetHidden(1, true); // 1隐藏、0显示

sheet.addValidationData(validation);

请注意上面的这俩个地方:

f8ddcb10ce1ccfbe6bfab286cd10b386.png

5c120a4f32affc52e6f6db8aeb4357f8.pnge2b3a2de78f50cdc829c696ee7e7c920.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值