【问题标题】:How to create dependent drop downs in excel sheet generated using POI?如何在使用 POI 生成的 Excel 工作表中创建相关下拉列表?
【发布时间】:2012-06-20 06:15:40
【问题描述】:

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

然后系统读取此excel文件并将此数据保存在数据库中。

以下是模板文件的快照,其中包含一些示例数据。

我想要的是当用户下载模板文件时(模板文件通常只有标题,所以用户知道哪些数据在哪一列),excel表应该有部门,产品,二级产品,地区和国家的下拉列表。这样用户就不会在这些列中输入任何无效值。

同样,产品因部门而异,二级产品因产品而异。它更像是依赖下拉菜单。

基本上,我需要使用 Apache POI 创建 excel 表,用户将在其中从下拉列表中选择值,而不是自己输入。

即使我们确实有服务器端验证,我们也会检查用户输入的值是否有效。

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

产品等也是如此。用户可以输入产品为 GFFX 或 GFFX Structuring 或 gffx 等。

是否可以使用 POI 在 Excel 工作表中执行此操作?如果不是,还有哪些其他可能的解决方案可以确保用户知道他们必须在每列中输入什么?

编辑 1:

我可以创建下拉菜单,但是否可以创建依赖下拉菜单?

【问题讨论】:

  • 在使用 POI 填充之前创建一个 excel 文件模板,在模板本身中通过 excel 或 VBA 编程应用您需要的限制。
  • @AurA。部门、产品等根据用户的访问权限动态地来自数据库。所以下拉菜单会因用户而异。

标签: java excel apache-poi


【解决方案1】:

我正要建议 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);

【讨论】:

  • 感谢您指出。但是是否可以像我们通常在 HTML 表单上那样做依赖下拉?
  • 是的,您可以,例如查看contextures.com/xlDataVal02.htmlexcelsemipro.com/2011/05/… :)
  • 我查看了您提供的链接。但是我需要以编程方式使用 java 和 Apache POI 来做同样的事情。
  • 确实,我猜有可能。我建议在带有小测试用例的模板中执行此操作,并在 POI 中对其进行逆向工程。我没有说它不会很痛苦 ;-)
【解决方案2】:

如果您已将(使用 POI)建议添加到用户可见且应填充的第一行上方的行(因此下方的行),您可以获得下拉列表(单击鼠标右键)标题包含建议并且是 hgidden)。

您不会获得(AFAIK)与 POI 的类别依赖关系,甚至不会获得纯 excel(没有 VBA)下拉列表(包含基于之前输入的值的建议)。

您可以做的是使用 POI 使用适当的原始数据填充帮助表,并使用 VBA 动态生成允许从列表中选择值的下拉列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-25
    • 2023-03-10
    • 1970-01-01
    • 2017-11-08
    相关资源
    最近更新 更多