2014-09-25 15 views
6

Sto cercando di rendere alcune celle excel obbligatorie in modo che un messaggio possa essere visualizzato, se sono lasciate vuote dall'utente.Come rendere obbligatorie le celle excel?

Workbook workbook = new XSSFWorkbook(); 
Sheet sheet = workbook.createSheet("Data Validation"); 

DataValidationHelper dataValidationHelper = sheet.getDataValidationHelper(); 
DataValidationConstraint lengthConstraint = dataValidationHelper.createTextLengthConstraint(
     DataValidationConstraint.OperatorType.BETWEEN, "2", "45"); 

CellRangeAddressList cellList = new CellRangeAddressList(0, 0, 1, 1); 
DataValidation validation = dataValidationHelper.createValidation(lengthConstraint, cellList); 

validation.setErrorStyle(ErrorStyle.STOP); 
validation.createErrorBox("Error", "The length must be between 2 and 45."); 
validation.setEmptyCellAllowed(false); 

if (validation instanceof XSSFDataValidation) { 
    validation.setSuppressDropDownArrow(false); 
    validation.setShowErrorBox(true); 
} else { 
    validation.setSuppressDropDownArrow(true); 
} 

sheet.addValidationData(validation); 

Row row = sheet.createRow(0); 
Cell cell = row.createCell(1); 
cell.setCellValue("Text"); 

Ho usato validation.setEmptyCellAllowed(false); e prevede che dovrebbe impedire alle cellule venga svuotato ma non funziona. Le celle su cui viene applicato questo vincolo sono tuttavia convalidate per una lunghezza compresa tra 2 e 45 caratteri.

Perché in questo caso non funziona validation.setEmptyCellAllowed(false);? Come rendere obbligatoria una cella in modo che non possa essere lasciata vuota?


Quando si utilizza il metodo validation.setEmptyCellAllowed(false);, sembra che il vincolo di convalida sia applicato correttamente in Excel.

enter image description here

La casella Ignora vuota sia selezionata. Excel consente ancora di lasciare vuote le celle su cui viene applicato questo vincolo.

Lo scopo di Ignora vuoto in Excel può essere diverso da quello che non capisco. Ad ogni modo ho bisogno di rendere certe celle obbligatorie. Se viene effettuato un tentativo di svuotarli, deve essere rifiutato e dovrebbe essere visualizzato un messaggio di errore appropriato. Potrebbe richiedere alcuni trucchi/codice Visual Basic da incorporare in Excel.

risposta

7

Ignora spazio vuoto non consente di ottenere ciò che desideri. In una situazione che descrivi, quando l'utente sta digitando nella cella, gli impedisce di creare una voce vuota. Tuttavia, NON gli impedisce di uscire dalla modalità di immissione dei dati (ad esempio utilizzando ESC) che lascerà vuota la cella. Inoltre, non gli impedisce di selezionare la cella, e di colpire Elimina senza entrare nel data entry.

A seconda esattamente ciò che si desidera fare, è possibile utilizzare una macro evento VBA per verificare se la cella è vuota dopo un determinato evento. Che si tratti di un evento Worksheet_SelectionChange, evento Worksheet_Deactivate, evento Workbook_Close o uno o più altri eventi, dipende dalle specifiche del progetto.

+0

Non conosco soluzione al vostro problema che può essere realizzato con la funzionalità solo nativo di Excel. Tuttavia, VBA (non VB) viene installato ogni volta che viene installato Excel. L'esecuzione di macro può essere limitata dalle politiche di sicurezza. Prova questo: con Excel aperto, fai clic con il tasto destro sulla scheda di un foglio e seleziona Visualizza codice. Se si apre una finestra di codice, allora VBA è installato. –

+0

@Tiny Segnalando il mio commento –

+0

Sì, la finestra del codice è stata aperta. – Tiny

0

Provare con quanto segue, ha funzionato per me !!!!

DataValidationConstraint lengthConstraint = validationHelper.createTextLengthConstraint(
       DataValidationConstraint.OperatorType.GREATER_THAN, "0", ""); 
+0

terzo argomento per il metodo "createTextLengthConstraint" genererà un'eccezione in fase di esecuzione. – Madhusudan

Problemi correlati