You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

XSSFDataValidationHelper.java 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. /**
  2. *
  3. */
  4. package org.apache.poi.xssf.usermodel;
  5. import java.util.ArrayList;
  6. import java.util.List;
  7. import org.apache.poi.ss.usermodel.DataValidation;
  8. import org.apache.poi.ss.usermodel.DataValidationConstraint;
  9. import org.apache.poi.ss.usermodel.DataValidationHelper;
  10. import org.apache.poi.ss.usermodel.DataValidationConstraint.ValidationType;
  11. import org.apache.poi.ss.util.CellRangeAddress;
  12. import org.apache.poi.ss.util.CellRangeAddressList;
  13. import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDataValidation;
  14. import org.openxmlformats.schemas.spreadsheetml.x2006.main.STDataValidationType;
  15. /**
  16. * @author <a href="rjankiraman@emptoris.com">Radhakrishnan J</a>
  17. *
  18. */
  19. public class XSSFDataValidationHelper implements DataValidationHelper {
  20. private XSSFSheet xssfSheet;
  21. public XSSFDataValidationHelper(XSSFSheet xssfSheet) {
  22. super();
  23. this.xssfSheet = xssfSheet;
  24. }
  25. /* (non-Javadoc)
  26. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createDateConstraint(int, java.lang.String, java.lang.String, java.lang.String)
  27. */
  28. public DataValidationConstraint createDateConstraint(int operatorType, String formula1, String formula2, String dateFormat) {
  29. return new XSSFDataValidationConstraint(ValidationType.DATE, operatorType,formula1, formula2);
  30. }
  31. /* (non-Javadoc)
  32. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createDecimalConstraint(int, java.lang.String, java.lang.String)
  33. */
  34. public DataValidationConstraint createDecimalConstraint(int operatorType, String formula1, String formula2) {
  35. return new XSSFDataValidationConstraint(ValidationType.DECIMAL, operatorType,formula1, formula2);
  36. }
  37. /* (non-Javadoc)
  38. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createExplicitListConstraint(java.lang.String[])
  39. */
  40. public DataValidationConstraint createExplicitListConstraint(String[] listOfValues) {
  41. return new XSSFDataValidationConstraint(listOfValues);
  42. }
  43. /* (non-Javadoc)
  44. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createFormulaListConstraint(java.lang.String)
  45. */
  46. public DataValidationConstraint createFormulaListConstraint(String listFormula) {
  47. return new XSSFDataValidationConstraint(ValidationType.LIST, listFormula);
  48. }
  49. public DataValidationConstraint createNumericConstraint(int validationType, int operatorType, String formula1, String formula2) {
  50. if( validationType==ValidationType.INTEGER) {
  51. return createIntegerConstraint(operatorType, formula1, formula2);
  52. } else if ( validationType==ValidationType.DECIMAL) {
  53. return createDecimalConstraint(operatorType, formula1, formula2);
  54. } else if ( validationType==ValidationType.TEXT_LENGTH) {
  55. return createTextLengthConstraint(operatorType, formula1, formula2);
  56. }
  57. return null;
  58. }
  59. /* (non-Javadoc)
  60. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createIntegerConstraint(int, java.lang.String, java.lang.String)
  61. */
  62. public DataValidationConstraint createIntegerConstraint(int operatorType, String formula1, String formula2) {
  63. return new XSSFDataValidationConstraint(ValidationType.INTEGER, operatorType,formula1,formula2);
  64. }
  65. /* (non-Javadoc)
  66. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createTextLengthConstraint(int, java.lang.String, java.lang.String)
  67. */
  68. public DataValidationConstraint createTextLengthConstraint(int operatorType, String formula1, String formula2) {
  69. return new XSSFDataValidationConstraint(ValidationType.TEXT_LENGTH, operatorType,formula1,formula2);
  70. }
  71. /* (non-Javadoc)
  72. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createTimeConstraint(int, java.lang.String, java.lang.String, java.lang.String)
  73. */
  74. public DataValidationConstraint createTimeConstraint(int operatorType, String formula1, String formula2) {
  75. return new XSSFDataValidationConstraint(ValidationType.TIME, operatorType,formula1,formula2);
  76. }
  77. public DataValidationConstraint createCustomConstraint(String formula) {
  78. return new XSSFDataValidationConstraint(ValidationType.FORMULA, formula);
  79. }
  80. /* (non-Javadoc)
  81. * @see org.apache.poi.ss.usermodel.DataValidationHelper#createValidation(org.apache.poi.ss.usermodel.DataValidationConstraint, org.apache.poi.ss.util.CellRangeAddressList)
  82. */
  83. public DataValidation createValidation(DataValidationConstraint constraint, CellRangeAddressList cellRangeAddressList) {
  84. XSSFDataValidationConstraint dataValidationConstraint = (XSSFDataValidationConstraint)constraint;
  85. CTDataValidation newDataValidation = CTDataValidation.Factory.newInstance();
  86. int validationType = constraint.getValidationType();
  87. switch(validationType) {
  88. case DataValidationConstraint.ValidationType.LIST:
  89. newDataValidation.setType(STDataValidationType.LIST);
  90. newDataValidation.setFormula1(constraint.getFormula1());
  91. break;
  92. case DataValidationConstraint.ValidationType.ANY:
  93. newDataValidation.setType(STDataValidationType.NONE);
  94. break;
  95. case DataValidationConstraint.ValidationType.TEXT_LENGTH:
  96. newDataValidation.setType(STDataValidationType.TEXT_LENGTH);
  97. break;
  98. case DataValidationConstraint.ValidationType.DATE:
  99. newDataValidation.setType(STDataValidationType.DATE);
  100. break;
  101. case DataValidationConstraint.ValidationType.INTEGER:
  102. newDataValidation.setType(STDataValidationType.WHOLE);
  103. break;
  104. case DataValidationConstraint.ValidationType.DECIMAL:
  105. newDataValidation.setType(STDataValidationType.DECIMAL);
  106. break;
  107. case DataValidationConstraint.ValidationType.TIME:
  108. newDataValidation.setType(STDataValidationType.TIME);
  109. break;
  110. case DataValidationConstraint.ValidationType.FORMULA:
  111. newDataValidation.setType(STDataValidationType.CUSTOM);
  112. break;
  113. default:
  114. newDataValidation.setType(STDataValidationType.NONE);
  115. }
  116. if (validationType!=ValidationType.ANY && validationType!=ValidationType.LIST) {
  117. newDataValidation.setOperator(XSSFDataValidation.operatorTypeMappings.get(constraint.getOperator()));
  118. if (constraint.getFormula1() != null) {
  119. newDataValidation.setFormula1(constraint.getFormula1());
  120. }
  121. if (constraint.getFormula2() != null) {
  122. newDataValidation.setFormula2(constraint.getFormula2());
  123. }
  124. }
  125. CellRangeAddress[] cellRangeAddresses = cellRangeAddressList.getCellRangeAddresses();
  126. List<String> sqref = new ArrayList<String>();
  127. for (int i = 0; i < cellRangeAddresses.length; i++) {
  128. CellRangeAddress cellRangeAddress = cellRangeAddresses[i];
  129. sqref.add(cellRangeAddress.formatAsString());
  130. }
  131. newDataValidation.setSqref(sqref);
  132. return new XSSFDataValidation(dataValidationConstraint,cellRangeAddressList,newDataValidation);
  133. }
  134. }