2014-09-25 18 views
6

Tôi đang cố gắng để làm cho một số tế bào excel bắt buộc để một tin nhắn có thể được hiển thị, nếu chúng được để trống bởi người dùng.Làm thế nào để làm cho các tế bào excel bắt buộc?

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

Tôi đã sử dụng validation.setEmptyCellAllowed(false); và dự kiến ​​rằng nó sẽ ngăn không cho các ô bị làm trống nhưng không hoạt động. Tuy nhiên, các ô mà trên đó ràng buộc này được thực thi, được xác nhận cho độ dài từ 2 đến 45 ký tự.

Tại sao validation.setEmptyCellAllowed(false); không hoạt động trong trường hợp này? Làm thế nào để làm cho một tế bào bắt buộc để nó không thể để trống?


Khi sử dụng phương pháp validation.setEmptyCellAllowed(false);, có vẻ như ràng buộc xác thực được áp dụng chính xác trong Excel.

enter image description here

Hộp kiểm Ignore trống được đánh dấu. Excel vẫn cho phép các ô mà ràng buộc này được thực thi để được để trống.

Mục đích của Bỏ qua trống trong Excel có thể khác mà tôi không hiểu. Dù sao tôi cần phải làm cho một số tế bào bắt buộc. Nếu một nỗ lực được thực hiện để làm rỗng chúng sau đó, nó sẽ bị từ chối và một thông báo lỗi thích hợp sẽ được hiển thị. Nó có thể yêu cầu một số thủ thuật/mã Visual Basic được nhúng trong Excel.

Trả lời

7

Bỏ qua khoảng trống không thực hiện được những gì bạn muốn. Trong tình huống khi bạn mô tả, khi người dùng nhập vào ô, nó ngăn cản anh ta tạo một mục nhập trống. Tuy nhiên, nó KHÔNG ngăn cản anh ta thoát khỏi chế độ nhập dữ liệu (ví dụ: sử dụng ESC) cũng sẽ để trống ô này. Nó cũng không ngăn cản anh ta chọn ô, và nhấn Xóa mà không đi vào nhập dữ liệu.

Tùy thuộc vào chính xác những gì bạn muốn làm, bạn có thể sử dụng macro sự kiện VBA để kiểm tra xem ô có trống sau một sự kiện nhất định hay không. Cho dù đây có phải là sự kiện Worksheet_SelectionChange, sự kiện Worksheet_Deactivate, sự kiện Workbook_Close hay một hoặc nhiều sự kiện khác, tùy thuộc vào chi tiết cụ thể của dự án của bạn.

+0

Tôi biết không có giải pháp cho vấn đề của bạn có thể được thực hiện chỉ với chức năng Excel gốc. Tuy nhiên, VBA (không phải VB) được cài đặt bất cứ khi nào Excel được cài đặt. Việc chạy Macros có thể bị hạn chế bởi các chính sách bảo mật. Hãy thử điều này: Với Excel mở, nhấp chuột phải vào tab trang tính và chọn Xem mã. Nếu một cửa sổ mã mở ra, thì VBA được cài đặt. –

+0

@Tiny Gắn cờ nhận xét của tôi –

+0

Có cửa sổ mã đã được mở. – Tiny

0

Hãy thử với những điều sau đây, nó làm việc cho tôi !!!!

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

đối số thứ ba cho phương thức "createTextLengthConstraint" sẽ ném ngoại lệ vào thời gian chạy. – Madhusudan

Các vấn đề liên quan