2014-09-25 6 views
6

Ich versuche, einige Excel-Zellen obligatorisch zu machen, damit eine Nachricht angezeigt werden kann, wenn sie vom Benutzer leer gelassen werden.Wie mache ich Excel-Zellen obligatorisch?

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

I verwendet validation.setEmptyCellAllowed(false); und erwartet, dass er geleert Zellen davor verhindern sollte, aber es funktioniert nicht. Die Zelle/n, für die diese Einschränkung erzwungen wird, werden jedoch für eine Länge validiert, die zwischen 2 und 45 Zeichen beträgt.

Warum funktioniert validation.setEmptyCellAllowed(false); in diesem Fall nicht? Wie mache ich eine Zelle obligatorisch, damit sie nicht leer bleiben kann?


Wenn die validation.setEmptyCellAllowed(false); Methode verwendet wird, so scheint es, die Validierung Einschränkung korrekt in Excel angelegt wird.

enter image description here

Die Checkbox ignorieren leere nicht aktiviert ist. Excel lässt weiterhin zu, dass die Zellen, für die diese Einschränkung durchgesetzt wird, leer bleiben.

Der Zweck von Ignorieren leer in Excel kann anders sein, dass ich nicht verstehe. Jedenfalls muss ich bestimmte Zellen obligatorisch machen. Wenn versucht wird, sie zu leeren, sollte sie zurückgewiesen werden und eine entsprechende Fehlermeldung sollte angezeigt werden. Es kann erfordern einige Visual Basic-Tricks/Code in Excel eingebettet werden.

Antwort

7

Ignorieren blank führt nicht, was Sie wollen. In einer Situation, wie sie beschrieben wird, verhindert der Benutzer, wenn er in die Zelle eintippt, dass er einen leeren Eintrag erstellt. Es verhindert jedoch NICHT, dass er den Dateneingabemodus verlässt (z. B. unter Verwendung von ESC), wodurch die Zelle ebenfalls leer bleibt. Es hindert ihn auch nicht daran, die Zelle auszuwählen und Delete zu treffen, ohne in die Dateneingabe zu gehen.

Je nachdem, was genau Sie tun möchten, können Sie mithilfe eines VBA-Ereignismakros testen, ob die Zelle nach einem bestimmten Ereignis leer ist. Ob dies ein Worksheet_SelectionChange Ereignis, Worksheet_Deactivate Ereignis, Workbook_Close Ereignis oder ein oder mehrere andere Ereignisse sein soll, hängt von den Besonderheiten Ihres Projekts ab.

+0

Ich kenne keine Lösung für Ihr Problem, das mit nur nativen Excel-Funktionalität erreicht werden kann. VBA (nicht VB) wird jedoch installiert, wenn Excel installiert wird. Das Ausführen von Makros kann durch Sicherheitsrichtlinien eingeschränkt werden. Versuchen Sie Folgendes: Wenn Excel geöffnet ist, klicken Sie mit der rechten Maustaste auf eine Registerkarte und wählen Sie Code anzeigen. Wenn ein Codefenster geöffnet wird, ist VBA installiert. –

+0

@Tiny Markierung meines Kommentars –

+0

Ja, das Codefenster wurde geöffnet. – Tiny

0

Versuchen Sie mit dem folgenden, es funktionierte für mich !!!!

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

Das dritte Argument für die Methode "createTextLengthConstraint" löst zur Laufzeit eine Ausnahme aus. – Madhusudan