/// <summary> /// Creates an instance of <see cref="ExcelDataValidation"/> out of the given parameters. /// </summary> /// <param name="type"></param> /// <param name="worksheet"></param> /// <param name="address"></param> /// <param name="itemElementNode"></param> /// <returns></returns> public static ExcelDataValidation Create(ExcelDataValidationType type, ExcelWorksheet worksheet, string address, eDataValidationStorageType storageType, XmlNode itemElementNode) { Require.Argument(type).IsNotNull("validationType"); switch (type.Type) { case eDataValidationType.Any: return(new ExcelDataValidationAny(worksheet, address, type, storageType, itemElementNode)); case eDataValidationType.TextLength: case eDataValidationType.Whole: return(new ExcelDataValidationInt(worksheet, address, type, storageType, itemElementNode)); case eDataValidationType.Decimal: return(new ExcelDataValidationDecimal(worksheet, address, type, storageType, itemElementNode)); case eDataValidationType.List: return(new ExcelDataValidationList(worksheet, address, type, storageType, itemElementNode)); case eDataValidationType.DateTime: return(new ExcelDataValidationDateTime(worksheet, address, type, storageType, itemElementNode)); case eDataValidationType.Time: return(new ExcelDataValidationTime(worksheet, address, type, storageType, itemElementNode)); case eDataValidationType.Custom: return(new ExcelDataValidationCustom(worksheet, address, type, storageType, itemElementNode)); default: throw new InvalidOperationException("Non supported validationtype: " + type.Type.ToString()); } }
/// <summary> /// Constructor which is only used in unit tests /// </summary> /// <param name="worksheet"></param> /// <param name="address"></param> /// <param name="validationType"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelDataValidationCustom(ExcelWorksheet worksheet, string address, ExcelDataValidationType validationType, XmlNode itemElementNode, XmlNamespaceManager namespaceManager, eDataValidationStorageType storageType = eDataValidationStorageType.Normal) : base(worksheet, address, validationType, storageType, itemElementNode, namespaceManager) { Formula = storageType == eDataValidationStorageType.X14 ? new ExcelDataValidationFormulaCustom(NameSpaceManager, TopNode, _x14Formula1Path) : new ExcelDataValidationFormulaCustom(NameSpaceManager, TopNode, _formula1Path); }
/// <summary> /// Constructor /// </summary> /// <param name="worksheet"></param> /// <param name="address"></param> /// <param name="validationType"></param> /// <param name="itemElementNode"></param> internal ExcelDataValidationDecimal(ExcelWorksheet worksheet, string address, ExcelDataValidationType validationType, eDataValidationStorageType storageType, XmlNode itemElementNode) : base(worksheet, address, validationType, storageType, itemElementNode) { if (storageType == eDataValidationStorageType.X14) { Formula = new ExcelDataValidationFormulaDecimal(NameSpaceManager, TopNode, _x14Formula1Path); Formula2 = new ExcelDataValidationFormulaDecimal(NameSpaceManager, TopNode, _x14Formula2Path); } else { Formula = new ExcelDataValidationFormulaDecimal(NameSpaceManager, TopNode, _formula1Path); Formula2 = new ExcelDataValidationFormulaDecimal(NameSpaceManager, TopNode, _formula2Path); } }
/// <summary> /// Constructor /// </summary> /// <param name="worksheet">worksheet that owns the validation</param> /// <param name="itemElementNode">Xml top node (dataValidations) when importing xml</param> /// <param name="validationType">Data validation type</param> /// <param name="address">address for data validation</param> /// <param name="namespaceManager">Xml Namespace manager</param> internal ExcelDataValidation(ExcelWorksheet worksheet, string address, ExcelDataValidationType validationType, eDataValidationStorageType storageType, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base(namespaceManager != null ? namespaceManager : worksheet.NameSpaceManager) { Require.Argument(address).IsNotNullOrEmpty("address"); address = CheckAndFixRangeAddress(address); if (itemElementNode == null && storageType == eDataValidationStorageType.Normal) { //var xmlDoc = worksheet.WorksheetXml; TopNode = worksheet.WorksheetXml.SelectSingleNode("//d:dataValidations", worksheet.NameSpaceManager); // did not succeed using the XmlHelper methods here... so I'm creating the new node using XmlDocument... var nsUri = NameSpaceManager.LookupNamespace("d"); //itemElementNode = TopNode.OwnerDocument.CreateElement(_itemElementNodeName, nsUri); itemElementNode = TopNode.OwnerDocument.CreateElement(_itemElementNodeName.Split(':')[1], nsUri); TopNode.AppendChild(itemElementNode); } _storageType = storageType; TopNode = itemElementNode; ValidationType = validationType; Address = new ExcelAddress(address); Init(); }
/// <summary> /// Constructor /// </summary> /// <param name="worksheet">worksheet that owns the validation</param> /// <param name="itemElementNode">Xml top node (dataValidations)</param> /// <param name="validationType">Data validation type</param> /// <param name="address">address for data validation</param> internal ExcelDataValidation(ExcelWorksheet worksheet, string address, ExcelDataValidationType validationType, eDataValidationStorageType storageType, XmlNode itemElementNode) : this(worksheet, address, validationType, storageType, itemElementNode, null) { }
/// <summary> /// Constructor /// </summary> /// <param name="worksheet">Worksheet that owns the validation</param> /// <param name="itemElementNode">Xml top node (dataValidations)</param> /// <param name="validationType">Data validation type</param> /// <param name="address">address for data validation</param> /// <param name="namespaceManager">for test purposes</param> internal ExcelDataValidationWithFormula2(ExcelWorksheet worksheet, string address, ExcelDataValidationType validationType, eDataValidationStorageType storageType, XmlNode itemElementNode, XmlNamespaceManager namespaceManager) : base(worksheet, address, validationType, storageType, itemElementNode, namespaceManager) { }
/// <summary> /// Constructor which is only used for unit tests /// </summary> /// <param name="worksheet"></param> /// <param name="address"></param> /// <param name="validationType"></param> /// <param name="itemElementNode"></param> /// <param name="namespaceManager"></param> internal ExcelDataValidationTime(ExcelWorksheet worksheet, string address, ExcelDataValidationType validationType, XmlNode itemElementNode, XmlNamespaceManager namespaceManager, eDataValidationStorageType storageType = eDataValidationStorageType.Normal) : base(worksheet, address, validationType, storageType, itemElementNode, namespaceManager) { Formula = new ExcelDataValidationFormulaTime(NameSpaceManager, TopNode, _formula1Path); Formula2 = new ExcelDataValidationFormulaTime(NameSpaceManager, TopNode, _formula2Path); }