//創建Excel工作薄對象
Workbook workbook = new HSSFWorkbook();
//生成一個表格 設置:頁簽
Sheet sheet = workbook.createSheet("sheet1");
//去數據庫中查詢我們想要的數據
List<Product> productList = Ebean.getServer(GlobalDBControl.getDB()) .createQuery(Product.class, "find product where 1 = 1 and status = 0 and producttype is not null ") .findList();
//創建一個數組 用來存放 我們取出來的數據
String[] productNameArray = new String[productList.size()];
//遍歷每個peoduct對象,來獲取productName屬性並添加到數組中
for (int i = 0; i < productList.size(); i++)
{ Product product = productList.get(i);
productNameArray[i] = product.getTitle(); }
//將下拉框數據放到新的sheet里,然后excle通過新的sheet數據加載下拉框數據
Sheet hidden = workbook.createSheet("hidden");
//創建單元格對象 Cell cell = null;
//遍歷我們上面的數組,將數據取出來放到新sheet的單元格中
for (int i = 0, length = productNameArray.length; i < length; i++)
{ //取出數組中的每個元素
String name = productNameArray[i];
//根據i創建相應的行對象(說明我們將會把每個元素單獨放一行)
Row row = hidden.createRow(i);
//創建每一行中的第一個單元格
cell = row.createCell(0);
//然后將數組中的元素賦值給這個單元格
cell.setCellValue(name); }
// 創建名稱,可被其他單元格引用
Name namedCell = workbook.createName(); namedCell.setNameName("hidden");
// 設置名稱引用的公式
namedCell.setRefersToFormula("hidden!$A$1:$A$" + productNameArray.length);
//加載數據,將名稱為hidden的sheet中的數據轉換為List形式
DVConstraint constraint = DVConstraint.createFormulaListConstraint("hidden");
// 設置第一列的3-65534行為下拉列表
// (3, 65534, 0, 0) ====> (起始行,結束行,起始列,結束列)
CellRangeAddressList regions = new CellRangeAddressList(3, 65534, 0, 0);
// 將設置下拉選的位置和數據的對應關系 綁定到一起
DataValidation dataValidation = new HSSFDataValidation(regions, constraint);
//將第二個sheet設置為隱藏 workbook.setSheetHidden(1, true);
//將數據賦給下拉列表 sheet.addValidationData(dataValidation);
//最后將文件導出就可以了,后面的代碼就不寫了,我只寫一些這個問題相關的代碼
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
如果出現多列情況,可復用下面方法
private void ExcelTo255(Workbook workbook,String sheetName,int sheetNameIndex,String[] sheetData,int firstRow,int lastRow,int firstCol,int lastCol){
//將下拉框數據放到新的sheet里,然后excle通過新的sheet數據加載下拉框數據
Sheet hidden = workbook.createSheet(sheetName);
//創建單元格對象
Cell cell =null;
//遍歷我們上面的數組,將數據取出來放到新sheet的單元格中
for (int i = 0, length = sheetData.length; i < length; i++){
//取出數組中的每個元素
String name = sheetData[i];
//根據i創建相應的行對象(說明我們將會把每個元素單獨放一行)
Row row = hidden.createRow(i);
//創建每一行中的第一個單元格
cell = row.createCell(0);
//然后將數組中的元素賦值給這個單元格
cell.setCellValue(name);
}
// 創建名稱,可被其他單元格引用
Name namedCell = workbook.createName();
namedCell.setNameName(sheetName);
// 設置名稱引用的公式
namedCell.setRefersToFormula(sheetName+"!$A$1:$A$" + sheetData.length);
//加載數據,將名稱為hidden的sheet中的數據轉換為List形式
DVConstraint constraint = DVConstraint.createFormulaListConstraint(sheetName);
// 設置第一列的3-65534行為下拉列表
// (3, 65534, 2, 2) ====> (起始行,結束行,起始列,結束列)
CellRangeAddressList regions = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
// 將設置下拉選的位置和數據的對應關系 綁定到一起
DataValidation dataValidation = new HSSFDataValidation(regions, constraint);
//將第二個sheet設置為隱藏
workbook.setSheetHidden(sheetNameIndex, true);
//將數據賦給下拉列表
workbook.getSheetAt(0).addValidationData(dataValidation);
}