poi建立excel檔案時,生成單元格下拉選
阿新 • • 發佈:2019-02-12
最近在專案中使用poi建立excel檔案時,需要生成單元格下拉選。
下面是一個demo,註釋比較清楚,以此參考。
package poi;
import java.io.FileOutputStream;
import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;
public class ExcelSetCheckbox {
public static void main(String[] args) {
String[] list={"廣州","深圳","東莞","珠海"};
new ExcelSetCheckbox().createListBox(list);
return ;
}
private void createListBox(String[] list) {
//檔案初始化
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
/**設定單元格格式為文字格式*/ HSSFCellStyle textStyle = workBook.createCellStyle(); HSSFDataFormat format = workBook.createDataFormat(); textStyle.setDataFormat(format.getFormat("@"));
//在第一行第一個單元格,插入下拉框
for (int i = 0; i < 10; i++) {
HSSFRow row = sheet.createRow(i);
for (int j = 0; j < 15; j++) {
HSSFCell cell = row.createCell(j);
//普通寫入操作
cell.setCellValue("請選擇"+i+j);//這是實驗
cell.setCellStyle(textStyle);//設定單元格格式為"文字" cell.setCellType(HSSFCell.CELL_TYPE_STRING);
}
}
// 設定資料有效性載入在哪個單元格上,四個引數分別是:起始行、終止行、起始列、終止列
CellRangeAddressList regions = new CellRangeAddressList(0,2,2,4);
//生成下拉框內容
DVConstraint constraint = DVConstraint.createExplicitListConstraint(list);
//繫結下拉框和作用區域
HSSFDataValidation data_validation = new HSSFDataValidation(regions,constraint);
//對sheet頁生效
sheet.addValidationData(data_validation);
//針對生效/失效日期單元格有效日期的限定
//生成日期類有效性
DVConstraint constraint3 = DVConstraint.createDateConstraint(DVConstraint.OperatorType.BETWEEN, "1970-1-1",
"2100-1-1", "yyyy-mm-dd");
//建立一個區域
CellRangeAddressList regions3 = new CellRangeAddressList(1,100,3,4);
//有效性--區域 組合
HSSFDataValidation data_validation3 = new HSSFDataValidation(regions3, constraint3);
//對sheet頁生效
sheet.addValidationData(data_validation3);
FileOutputStream fileOut;
try {
fileOut = new FileOutputStream("d://workbook.xls");
wb.write(fileOut);
fileOut.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("over");
}
}