如何使用POI生成Excel工作表中创建相关的下拉菜单?(How to create depende

2019-06-25 14:47发布

我们有我们的基于Java的Web应用程序的功能中,用户可以从Web应用程序下载一个Excel工作表模板。 填写他们的数据在此模板,然后上载同一个Excel表。

然后,系统读取该Excel文件,并保存在数据库中的这些数据。

下面是它的一些样本数据模板文件的快照。

当用户下载模板文件(模板文件通常只是有头,让用户了解哪些数据适合哪个列),Excel工作表应该有部门,产品,辅助产品,地区和国家的下拉菜单我要的是。 这样用户就不会在这些列中输入任何无效的值。

同样,产品根据司和根据产品次级产品的变化而变化。 它更像是依赖下拉菜单。

基本上,我将需要创建使用Apache POI的Excel工作表,其中用户将从dowsn而不是键入它themselevs下拉选择值。

尽管我们有服务器端验证,我们检查用户输入的值是有效还是无效。

我们wnat这样做的原因是,例如,一些用户可能输入国为美国,一些如美国和一些为美国。

同样的事情也适用于产品等。用户可以输入产品的GFFX或GFFX结构化或gffx等。

是否有可能使用POI为此在Excel工作表? 如果没有什么其他可能的解决方案或WASY,以确保用户知道他们有什么在每列中输入?

编辑1:

我创建了下拉菜单,但有可能产生依赖下拉菜单?

Answer 1:

我正要建议灵气的解决方案,但它看起来像你必须确实建立在运行时验证列表。

你应该看看POI快速指南 ,看来他们有你需要的东西:

hssf.usermodel(二进制.xls格式)

HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet("Data Validation");
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
DVConstraint dvConstraint = DVConstraint.createExplicitListConstraint(new String[]{"10", "20", "30"});
DataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint);
dataValidation.setSuppressDropDownArrow(false);
sheet.addValidationData(dataValidation);

xssf.usermodel(.XLSX格式)

XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Data Validation");
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint)
dvHelper.createExplicitListConstraint(new String[]{"11", "21", "31"});
CellRangeAddressList addressList = new CellRangeAddressList(0, 0, 0, 0);
XSSFDataValidation validation = (XSSFDataValidation)dvHelper.createValidation(
dvConstraint, addressList);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);


Answer 2:

你可以下拉列表的情况下,您添加(使用POI)的建议,上排的第一行是对用户可见,应填写(因此标题下面的行包含(点击鼠标右键后)建议,但是hgidden)。

你不会得到与POI,甚至纯粹的Excel文件(没有VBA)(据我所知)类扶养下拉列表(的基础上持有建议的值较早进入)。

你可以做什么,是用POI来填充相应的原始数据的辅助表和使用VBA动态生成下拉菜单,将允许挑选从列表中值。



文章来源: How to create dependent drop downs in excel sheet generated using POI?