问题
I have created an excell file using NPOI
using following code
var workbook = new HSSFWorkbook();
var sheet = workbook.CreateSheet("Candidate");
// Add header labels
var rowIndex = 0;
var row = sheet.CreateRow(rowIndex);
row.CreateCell(0).SetCellValue("Name");
row.CreateCell(1).SetCellValue("1,2,3");
row.CreateCell(2).SetCellValue("4,5,6");
row.CreateCell(3).SetCellValue("7,8,9");
rowIndex++;
// Add data rows
for (int i = 1; i <= 5; i++)
{
row = sheet.CreateRow(rowIndex);
row.CreateCell(0).SetCellValue("Candidate" + i.ToString());
row.CreateCell(1).SetCellValue("");
row.CreateCell(2).SetCellValue("");
row.CreateCell(3).SetCellValue("");
rowIndex++;
}
I just wanted to add some validation in each cell.
For eg: restrict cell 2 with inputs only 1,2,3
In Excel we can Set Data Validation
to whole number
and can specify Min and Max Value
.
Any idea for achieving this will be a great help.
回答1:
Try this example
XSSFDataValidation dataValidation = null;
XSSFDataValidationConstraint dvConstraint = null;
XSSFDataValidationHelper validationHelper = null;
int DVRowLimit = (Int16.MaxValue);
XSSFCellStyle numberCellStyle = (XSSFCellStyle)workbook.CreateCellStyle();
XSSFDataFormat numberDataFormat = (XSSFDataFormat)workbook.CreateDataFormat();
numberCellStyle.SetDataFormat(numberDataFormat.GetFormat("#,###,###"));
CellRangeAddressList cellRangeFieldsType1 = new CellRangeAddressList(1, DVRowLimit, headerCount, headerCount);
dvConstraint = (XSSFDataValidationConstraint)validationHelper.CreateintConstraint(OperatorType.BETWEEN, "0", Int64.MaxValue.ToString());
dataValidation = (XSSFDataValidation)validationHelper.CreateValidation(dvConstraint, cellRangeFieldsType1);
dataValidation.ShowErrorBox = true;
dataValidation.SuppressDropDownArrow = true;
dataValidation.ErrorStyle = 0;
dataValidation.CreateErrorBox("InvalidValue", "Number Should be a integer.");
dataValidation.ShowErrorBox = true;
dataValidation.CreatePromptBox("Number Data Validation", "Enter Number.");
dataValidation.ShowPromptBox = true;
sheet.AddValidationData(dataValidation);
sheet.SetDefaultColumnStyle(column, numberCellStyle);
similarly for range validation try
dvConstraint = (XSSFDataValidationConstraint)validationHelper.CreateintConstraint(OperatorType.BETWEEN, "0", "10");
I have consolidated similar examples into a documentation for NPOI. it covers various types of data validation and constraints. Documentation also includes the case when total character count for constraints are more than 255 characters.
回答2:
I find out this and working greatly with following code.
var markConstraint = DVConstraint.CreateExplicitListConstraint(new string[]{"1","2","3"});
var markColumn = new CellRangeAddressList(1, 5, 1, 1);
var markdv = new HSSFDataValidation(markColumn, markConstraint);
markdv.EmptyCellAllowed = true;
markdv.CreateErrorBox("Wrong Value", "Please Enter a correct value");
sheet.AddValidationData(markdv);
来源:https://stackoverflow.com/questions/17210373/how-to-set-validation-for-a-cell-in-excel-created-using-npoi