Вопрос по apache-poi, java, excel – Как создать зависимые выпадающие списки в листе Excel, сгенерированном с помощью POI?

2

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

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

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

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

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

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

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

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

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

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

EDIT 1 :

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

enter image description here

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

Ваш Ответ

2   ответа
0

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

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

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

6

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

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

Похожие вопросы