package xls20170828comboBox;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddressList;
/**
* ------------------------------------------------------------------------------
* http://wuhaidong.iteye.com/blog/2039848
* ------------------------------------------------------------------------------
手工設定:
excel菜單欄上--資料--有效性--允許--序列,
excel菜單欄上--資料--有效性--輸入資訊.
程式現實:
首先,http://poi.apache.org/官方下載下傳POI3.2 jar包.
注:經本人測試轉載的文章中有一些錯誤:
1. 使用POI3.2.jar建立的提示框不支援中文,最終我換成了POI3.5.jar就能支援中文了.
2. DVConstraint constraint = DVConstraint.createCustomFormulaConstraint("B1");
這樣寫有點問題,提示字段中可輸入的值隻能輸入B1的内容.
這一句的意思是設定限制條件引用B1單元格中的内容,查找API後發現必須要有一個限制才行,我的靈活處理的方法是設定為BB1,
一般不會有這麼多字段,BB1沒有限制就相當于建立了一個沒有限制的單元格.
本為是對上一篇部落格的中内容的封裝,封裝後的方法使用起來更友善一些.
*------------------------------------------------------------------------------
* @author ZengWenFeng
* @date 2017.08.28
*/
public class PoiTest2
{
/**
* 設定某些列的值隻能輸入預制的資料,顯示下拉框.
*
* @param sheet 要設定的sheet.
* @param textlist 下拉框顯示的内容
* @param firstRow 開始行
* @param endRow 結束行
* @param firstCol 開始列
* @param endCol 結束列
* @return 設定好的sheet.
*/
public static HSSFSheet setHSSFValidation(HSSFSheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol)
{
// 加載下拉清單内容
DVConstraint constraint = DVConstraint.createExplicitListConstraint(textlist);
// 設定資料有效性加載在哪個單元格上,四個參數分别是:起始行、終止行、起始列、終止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// 資料有效性對象
HSSFDataValidation data_validation_list = new HSSFDataValidation(regions, constraint);
sheet.addValidationData(data_validation_list);
//
return sheet;
}
/**
* 設定單元格上提示
*
* @param sheet 要設定的sheet.
* @param promptTitle 标題
* @param promptContent 内容
* @param firstRow 開始行
* @param endRow 結束行
* @param firstCol 開始列
* @param endCol 結束列
* @return 設定好的sheet.
*/
public static HSSFSheet setHSSFPrompt(HSSFSheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, int firstCol, int endCol)
{
// 構造constraint對象
DVConstraint constraint = DVConstraint.createCustomFormulaConstraint("BB1");
// 四個參數分别是:起始行、終止行、起始列、終止列
CellRangeAddressList regions = new CellRangeAddressList(firstRow, endRow, firstCol, endCol);
// 資料有效性對象
HSSFDataValidation data_validation_view = new HSSFDataValidation(regions, constraint);
data_validation_view.createPromptBox(promptTitle, promptContent);
sheet.addValidationData(data_validation_view);
//
return sheet;
}
public static void main(String[] args) throws IOException
{
HSSFWorkbook wb = new HSSFWorkbook();// excel檔案對象
HSSFSheet sheetlist = wb.createSheet("sheetlist");// 工作表對象
FileOutputStream out = new FileOutputStream("d:\\success.xls");
String[] textlist =
{
// "清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5",
"清單1", "清單2", "清單3", "清單4", "清單5"
};
// Exception in thread "main" java.lang.IllegalArgumentException: String literals in formulas can't be bigger than 255 characters ASCII
// at org.apache.poi.ss.formula.ptg.StringPtg.<init>(StringPtg.java:65)
// at org.apache.poi.hssf.usermodel.DVConstraint.createListFormula(DVConstraint.java:412)
// at org.apache.poi.hssf.usermodel.DVConstraint.createFormulas(DVConstraint.java:385)
// at org.apache.poi.hssf.usermodel.HSSFDataValidation.createDVRecord(HSSFDataValidation.java:195)
// at org.apache.poi.hssf.usermodel.HSSFSheet.addValidationData(HSSFSheet.java:396)
// at xls20170828comboBox.PoiTest2.setHSSFValidation(PoiTest2.java:58)
// at xls20170828comboBox.PoiTest2.main(PoiTest2.java:161)
// 行号開始、行号結束、列号開始、列号結束
sheetlist = setHSSFValidation(sheetlist, textlist, 0, 500, 0, 0);// 第一列的前501行都設定為選擇清單形式.
// sheetlist = setHSSFPrompt(sheetlist, "promt Title", "prompt Content", 0, 500, 1, 1);// 第二列的前501行都設定提示.
wb.write(out);
out.close();
}
}
參考解決方案
http://www.mamicode.com/info-detail-1442009.html
然後呢:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiIXZ05WZD9CX5RXa2Fmcn9CXwczLcVmds92czlGZvwVP9EUTDZ0aRJkSwk0LcxGbpZ2LcBDM08CXlpXazRnbvZ2LcRlMMVDT2EWNvwFdu9mZvwVP9cnW1ZlMjBTOsNGbO1mYsJ0MjZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39jM3QTMzYjMwEDMykDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)