3

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

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

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

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

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

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

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

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

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

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

编辑 1:

我可以创建下拉菜单,但是否可以创建相关下拉菜单?

在此处输入图像描述

4

2 回答 2

7

我正要建议 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);
于 2012-06-20T08:14:00.607 回答
0

如果您已将(使用 POI)建议添加到用户可见且应填充的第一行上方的行(因此标题下方的行包含建议并隐藏)。

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

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

于 2012-06-20T06:30:12.733 回答