POI 提供了很好的Excel 操作API,我这是用POI 3.8 主要核心jar包
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
调用此方法
wb = ExcelUtil.createSelectSheet(wb, list, 5,"hd","A",0,65534);//创建机构名称的下拉框
list 是数据源 string 数组
5 是 放置到模板的第6列
hd 是隐藏放置下拉框数据的sheet
A 是sheet中放置下拉数据的列
0表示第一列
65534 在模板中生成下拉框65534行
poi-3.8-20120326.jar
poi-ooxml-3.8-20120326.jar
/**
* 生成下载模板,附带下拉框
* @param wb :工作簿
* @param datas:下拉框数据源
* @param selectCols:要生成下拉框的列
* @param sheetName:放置下拉框的sheet名称
* @param dataCol:放置下拉框数据的col字母
* @param dataColNum:放置下拉框数据的col 数字 0开始
* @param maxSelCols:生成下拉框的行数
* @return
*/
public static Workbook createSelectSheet(Workbook wb,
String[] datas,
int selectCols,
String sheetName,String dataCol,
int dataColNum,int maxSelCols){
DataValidationHelper dvHelper = null;
DataValidationConstraint dvConstraint = null;
DataValidation validation = null;
CellRangeAddressList addressList = null;
Sheet hidden = wb.createSheet(sheetName);//创建隐藏的sheet 用于放置下拉数据
wb.setSheetHidden(wb.getNumberOfSheets() -1, true);//专门放置数据源的sheet
Name namedCell = wb.createName();
namedCell.setNameName(sheetName);
// namedCell.setRefersToFormula(sheetName+"!$A$1:$A$10" + datas.length);
namedCell.setRefersToFormula(sheetName+"!$"+dataCol+"$1:$"+dataCol+"$"+datas.length);
Sheet sheet = wb.getSheetAt(0);
int sheetRows = maxSelCols;//当前sheet页的行数
Row row = null;
Cell cell = null;
if (wb instanceof HSSFWorkbook) {//xls
for (int i = 0, length = datas.length; i < length; i++) { //将数据源的数据放置到选定sheet的一列
row = (HSSFRow)hidden.createRow(i);
cell = (HSSFCell)row.createCell(dataColNum);
cell.setCellValue(datas[i]);
}
DVConstraint constraint = DVConstraint.createFormulaListConstraint(sheetName);
addressList = new CellRangeAddressList(1, sheetRows, selectCols, selectCols);
validation = new HSSFDataValidation(addressList, constraint);
sheet.addValidationData(validation);
validation.setShowErrorBox(false);// 取消弹出错误框
} else {//XLSX
for (int i = 0, length = datas.length; i < length; i++) {
row = (XSSFRow)hidden.createRow(i);
cell = (XSSFCell)row.createCell(dataColNum);
cell.setCellValue(datas[i]);
}
dvHelper = new XSSFDataValidationHelper((XSSFSheet) sheet);
dvConstraint = (XSSFDataValidationConstraint) dvHelper.createFormulaListConstraint(sheetName);
addressList = new CellRangeAddressList(1, sheetRows, selectCols, selectCols);
validation = (XSSFDataValidation) dvHelper.createValidation(
dvConstraint, addressList);
sheet.addValidationData(validation);//将下拉框放置到sheet
}
return wb;
}
调用此方法
wb = ExcelUtil.createSelectSheet(wb, list, 5,"hd","A",0,65534);//创建机构名称的下拉框
list 是数据源 string 数组
5 是 放置到模板的第6列
hd 是隐藏放置下拉框数据的sheet
A 是sheet中放置下拉数据的列
0表示第一列
65534 在模板中生成下拉框65534行