Как создать зависимые выпадающие списки в листе Excel, сгенерированном с помощью POI?

у нас есть функция в нашем веб-приложении на основе Java, где пользователь может загрузить шаблон листа Excel из веб-приложения. Заполните их данные в этом шаблоне, а затем загрузите тот же лист Excel.

Затем система читает этот файл Excel и сохраняет эти данные в базе данных.

Ниже приведен снимок файла шаблона с некоторыми примерами данных в нем.

Я хочу, чтобы пользователи загружали файл шаблона (файл шаблона обычно имеет только заголовки, чтобы пользователи знали, в какие столбцы идут данные), в листе Excel должны быть раскрывающиеся списки для подразделения, продукта, вторичного продукта, региона и страны. Чтобы пользователи не вводили недопустимые значения в эти столбцы.

Кроме того, продукты варьируются в зависимости от подразделений, а вторичный продукт зависит от продуктов. Это больше похоже на зависимые выпадающие списки.

По сути, мне нужно будет создать лист Excel, используя Apache POI, в котором пользователи будут выбирать значения из выпадающего списка, а не вводить их самостоятельно.

Даже если у нас есть проверка на стороне сервера, где мы проверяем, действительны ли введенные пользователями значения или нет.

Причина, по которой мы хотим это сделать, заключается в том, что, например, некоторые пользователи могут ввести страну как США, некоторые как США, а некоторые как Соединенные Штаты.

То же самое касается продуктов и т. Д. Пользователь может ввести продукт как GFFX или GFFX Structuring или Gffx и т. Д.

Можно ли сделать это в листе Excel с помощью POI? Если нет, каковы другие возможные решения или нет, чтобы пользователи знали, что им нужно вводить в каждом столбце?

EDIT 1 :

Я мог бы создать выпадающие списки, но возможно ли создать зависимые выпадающие списки?

enter image description here

 AurA20 июн. 2012 г., 08:33
Создайте шаблон файла Excel перед тем, как заполнять его POI, в самом шаблоне примените необходимые ограничения с помощью программирования Excel или VBA.
 ashishjmeshram20 июн. 2012 г., 08:44
@AurA. Отдел, продукты и т. Д. Динамически поступают из базы данных в зависимости от доступа пользователя. Поэтому выпадающие списки будут варьироваться от пользователя к пользователю.

Ответы на вопрос(2)

мыши), если вы добавили (с помощью POI) предложения в верхнюю строку первой строки, которая видна пользователю и должна быть заполнена (таким образом, строки под заголовком содержат предложения и скрыты).

Вы не получите (AFAIK) зависимость от категории с POI или даже с раскрывающимся списком pure excel (без VBA) (который содержит предложения на основе значений, введенных ранее).

Что вы можете сделать, это использовать POI для заполнения вспомогательного листа соответствующими необработанными данными и использовать VBA для динамического создания раскрывающихся списков, которые позволят выбрать значение из списка.

но похоже, что вам действительно нужно будет создать список проверки во время выполнения.

Вы должны взглянуть наКраткое руководство по 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);
 ashishjmeshram20 июн. 2012 г., 11:24
Хорошо. Я попробую. :-)
 20 июн. 2012 г., 10:46
Да, вы можете взглянуть наcontextures.com/xlDataVal02.html или жеexcelsemipro.com/2011/05/… например :)
 ashishjmeshram20 июн. 2012 г., 10:41
Спасибо за указание на это. Но возможно ли сделать зависимые выпадающие списки, которые мы обычно имеем в формах HTML?
 ashishjmeshram20 июн. 2012 г., 10:57
Я посмотрел на ссылки, которые вы дали. Но мне нужно сделать то же самое, используя Java и Apache POI программно.
 20 июн. 2012 г., 11:12
Действительно, и это возможно, я думаю. Я бы порекомендовал сделать это в шаблоне с небольшим тестовым примером и перепроектировать его в POI. Я не сказал, что это не будет больно ;-)

Ваш ответ на вопрос