2014-09-25 10 views
6

Próbuję ustawić niektóre komórki programu Excel jako obowiązkowe, aby można było wyświetlić komunikat, jeśli użytkownik nie zaznaczy tego pola.Jak ustawić celowniki Excel jako obowiązkowe?

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"); 

użyłem validation.setEmptyCellAllowed(false); i oczekuje się, że powinno to zapobiec komórki przed opróżniane ale to nie działa. Komórka, w której wymuszone jest to ograniczenie, jest jednak sprawdzana pod kątem długości od 2 do 45 znaków.

Dlaczego validation.setEmptyCellAllowed(false); nie działa w tym przypadku? Jak ustawić komórkę jako obowiązkową, aby nie można było pozostawić pustą?


Kiedy stosowana jest metoda validation.setEmptyCellAllowed(false);, wydaje się ograniczenie walidacja jest prawidłowo stosowane w programie Excel.

enter image description here

Pole wyboru Ignoruj ​​pustejest zaznaczona. Program Excel nadal zezwala na pozostawienie pustego pola w komórkach, w których wymuszone jest to ograniczenie.

Celem Ignoruj ​​puste w programie Excel może być inny, że nie rozumiem. W każdym razie muszę ustawić pewne komórki jako obowiązkowe. Jeśli zostanie podjęta próba ich opróżnienia, należy je odrzucić i wyświetlić odpowiedni komunikat o błędzie. Może wymagać pewnych sztuczek/kodu Visual Basic do osadzenia w Excelu.

Odpowiedz

7

Ignoruj ​​puste pole, nie osiąga tego, co chcesz. W opisywanej sytuacji, gdy użytkownik wpisuje się do komórki, uniemożliwia mu utworzenie pustego wpisu. Jednak NIE uniemożliwia on mu wychodzenia z trybu wprowadzania danych (na przykład z użyciem ESC), co również pozostawi pustą komórkę. Nie przeszkadza mu to również w wyborze komórki i trafianiu bez konieczności wchodzenia do wprowadzania danych.

W zależności od tego, co dokładnie chcesz zrobić, możesz użyć makra zdarzenia VBA, aby sprawdzić, czy komórka jest pusta po określonym zdarzeniu. To, czy to powinno być zdarzenie Worksheet_SelectionChange, Worksheet_Deactivate zdarzenie, Workbook_Close lub jedno lub więcej innych zdarzeń, zależy od specyfiki projektu.

+0

Nie znam żadnego rozwiązania problemu, który można osiągnąć za pomocą natywnej funkcjonalności programu Excel. Jednak VBA (nie VB) instaluje się zawsze, gdy jest zainstalowany program Excel. Uruchomienie makr może być ograniczone przez zasady bezpieczeństwa. Spróbuj: Otwórz program Excel, kliknij prawym przyciskiem myszy kartę arkusza i wybierz opcję Wyświetl kod. Jeśli otworzy się okno kodu, instalowany jest VBA. –

+0

@Tiny Oznaczanie mojego komentarza –

+0

Tak, okno kodu zostało otwarte. – Tiny

0

Spróbuj z następującymi, pracował dla mnie !!!!

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

trzeci argument dla metody "createTextLengthConstraint" spowoduje zgłoszenie wyjątku w czasie wykonywania. – Madhusudan

Powiązane problemy