我们在基于Java的Web应用程序中有一个功能,用户可以从Web应用程序下载Excel工作表模板。在此模板中填写数据,然后上传相同的Excel工作表。
系统然后读取此excel文件并将此数据保存在数据库中。
下面是模板文件的快照,其中包含一些示例数据。
我想要的是当用户下载模板文件时(模板文件通常只有标题,因此用户知道哪些数据在哪一列中),excel表应该包含Division,Product,secondary product,Region和country的下拉列表。这样用户就不会在这些列中输入任何无效值。
同样,产品根据部门而有所不同,次要产品因产品而异。它更像是依赖性下降。
基本上我需要使用Apache POI创建excel表,用户将从drop dowsn中选择值而不是将它们键入其中。
即使我们确实有服务器端验证,我们也会检查用户输入的值是否有效。
我们想要做到这一点的原因是,例如有些用户可能会以美国的身份进入某个国家
产品等也是如此。用户可以输入GFFX或GFFX Structuring或gffx等产品。
是否可以使用POI在Excel工作表中执行此操作?如果没有其他可能的解决方案,或者确保用户知道他们必须在每列中输入什么?
编辑1:
我可以创建下拉菜单,但是可以创建依赖的下拉菜单吗?
答案 0 :(得分:6)
我打算建议AurA的解决方案,但看起来你必须在运行时建立验证列表。
你应该看看POI Quick Guide,它们似乎正是你所需要的:
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);
答案 1 :(得分:0)
您可以获得下拉列表(单击鼠标右键),以防您已经(使用POI)建议添加到用户可见的第一行上方的行并且应该填充(因此下面的行标题包含建议并被隐藏)。
您将不会获得(AFAIK)类别依赖性与POI甚至纯粹的Excel(没有VBA)下拉列表(根据之前输入的值保存建议)。
您可以做的是使用POI用适当的原始数据填充帮助表,并使用VBA动态生成可以从列表中选择值的下拉列表。