2012-06-20 23 views
1

我們在我們基於Java的Web應用程序中有一個功能,用戶可以從Web應用程序下載Excel工作表模板。填寫他們的數據在這個模板中,然後上傳相同的Excel表格。如何在使用興趣點生成的Excel表格中創建相關的下拉菜單?

然後系統讀取這個excel文件並將這些數據保存在數據庫中。

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

我想要的是,當用戶下載模板文件時(模板文件通常只有標題,所以用戶知道哪些數據在哪一列出現),excel表應該對分區,產品,次級產品,地區和國家。這樣用戶就不會在這些列中輸入任何無效的值。

同樣,產品因部門而異,次要產品因產品而異。它更像依賴性的下拉菜單。

基本上我需要使用Apache POI來創建Excel表格,用戶可以從下拉列表中選擇數值而不是鍵入themselevs。

即使我們確實有服務器端驗證,我們檢查用戶輸入的值是否有效。

我們這樣做的原因是,例如,一些用戶可能會像美國一樣進入國家,一些像美國一樣進入美國,一些像美國一樣。

同樣的事情也適用於產品等。用戶可以輸入產品的GFFX或GFFX結構化或gffx等

是否有可能使用POI爲此在Excel工作表?如果沒有其他可能的解決方案,或者確保用戶知道他們必須在每個列中輸入什麼內容,

編輯1:

我可以創建的下拉菜單,但有可能產生依賴下拉菜單?

enter image description here

+0

與POI填充它之前創建Excel文件的模板,在模板本身適用於您通過Excel或VBA編程需要的限制。 – AurA

+0

@AurA。根據用戶的訪問權限,該部門,產品等動態來自數據庫。所以下拉式會因用戶而異。 – ashishjmeshram

回答

0

你可以得到下拉列表中的情況下,你已經添加了(使用POI)的建議,上排的第一行是可見的用戶,應該是(點擊鼠標右鍵後)填充(因此標題下方的行包含建議並且被隱藏)。

您不會得到(AFAIK)類別與POI甚至純Excel(沒有VBA)下拉列表(根據前面輸入的值的建議)的類別依賴性。

你可以做什麼,是使用POI來填充輔助工具表和適當的原始數據,並使用VBA動態生成允許從列表中選擇一個值的下拉列表。

4

我正要提出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); 
+0

感謝您指出。但是,是否有可能像我們通常在HTML表單上那樣執行相關的下拉菜單? – ashishjmeshram

+0

是的,你可以看看http://www.contextures.com/xlDataVal02.html或http://excelsemipro.com/2011/05/a-dynamic-dependent-drop-down-list-in-excel /例如:) –

+0

我看看你給的鏈接。 BUt我將需要以編程方式使用java和Apache POI執行相同的操作。 – ashishjmeshram

相關問題