方法粘贴过去就可以直接用,不需要返回值,
/**
*
* @param wb HSSFWorkbook对象
* @param sheet HSSFSheet 需要验证的界面
* @param targetSheet targetSheet 储存下拉项的页面名(是名字,字符串)
* @param validData 下拉项数组
* @param index 单元格的位置
*/
private void setDataValid(HSSFWorkbook wb, HSSFSheet sheet, String targetSheet, String[] validData, int index) {
//创建临时页
HSSFSheet sheetTemp = wb.createSheet(targetSheet);
//设置下拉页页面隐藏
int sheetIndex = wb.getSheetIndex(targetSheet);
wb.setSheetHidden(sheetIndex, true);
//创建单元格对象
HSSFCell cell = null;
//遍历我们上面的数组,将数据取出来放到新sheet的单元格中
for (int i = 0, length = validData.length; i < length; i++) {
//取出数组中的每个元素
String dataTemp = validData[i];
//根据i创建相应的行对象(说明我们将会把每个元素单独放一行)
HSSFRow row = sheetTemp.createRow(i);
//创建每一行中的第一个单元格
cell = row.createCell(0);
//然后将数组中的元素赋值给这个单元格
cell.setCellValue(dataTemp);
}
// 创建名称,可被其他单元格引用
Name namedCell = wb.createName();
namedCell.setNameName(targetSheet);
// 设置名称引用的公式
namedCell.setRefersToFormula(targetSheet + "!$A$1:$A$" + validData.length);
//加载数据,将名称为hidden的sheet中的数据转换为List形式
// 设置验证数据内容
DVConstraint constraint = DVConstraint.createFormulaListConstraint(targetSheet);
// 设置需要验证的单元格范围(范围:1-60000行的第几列到第几列设置)
CellRangeAddressList rangeAddressList = new CellRangeAddressList(1, 60000, index, index);
// 创建数据验证规则对象
DataValidation dataValidation = new HSSFDataValidation(rangeAddressList, constraint);
// 设置验证对象错误提示内容
dataValidation.createErrorBox("error", "请选择正确的数据");
// 将工作表添加验证对象
sheet.addValidationData(dataValidation);
}
导出文件方法
public void downLoadExcel(String fileName, HttpServletResponse response, Workbook workbook) {
try {
response.setCharacterEncoding("UTF-8");
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setHeader("Content-Disposition",
"attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
workbook.write(response.getOutputStream());
} catch (IOException e) {
throw new RuntimeException(e.getMessage());
}
}