| using System.Collections; | |
| using System.Collections.Generic; | |
| using System.Xml; | |
| using OfficeOpenXml.Utils; | |
| namespace OfficeOpenXml; | |
| public class ExcelProtectedRangeCollection : XmlHelper, IEnumerable<ExcelProtectedRange> { | |
| internal ExcelProtectedRangeCollection( | |
| XmlNamespaceManager nsm, | |
| XmlNode topNode, | |
| ExcelWorksheet ws) | |
| : base(nsm, topNode) { | |
| foreach (XmlNode protectedRangeNode in topNode.SelectNodes( | |
| "d:protectedRanges/d:protectedRange", | |
| nsm)) { | |
| if (!(protectedRangeNode is XmlElement)) { | |
| continue; | |
| } | |
| _baseList.Add( | |
| new( | |
| protectedRangeNode.Attributes["name"].Value, | |
| new(SqRefUtility.FromSqRefAddress(protectedRangeNode.Attributes["sqref"].Value)), | |
| nsm, | |
| topNode)); | |
| } | |
| } | |
| private readonly List<ExcelProtectedRange> _baseList = new(); | |
| public ExcelProtectedRange Add(string name, ExcelAddress address) { | |
| if (!ExistNode("d:protectedRanges")) { | |
| CreateNode("d:protectedRanges"); | |
| } | |
| var newNode = CreateNode("d:protectedRanges/d:protectedRange"); | |
| var item = new ExcelProtectedRange(name, address, NameSpaceManager, newNode); | |
| _baseList.Add(item); | |
| return item; | |
| } | |
| public void Clear() { | |
| DeleteNode("d:protectedRanges"); | |
| _baseList.Clear(); | |
| } | |
| public bool Contains(ExcelProtectedRange item) { | |
| return _baseList.Contains(item); | |
| } | |
| public void CopyTo(ExcelProtectedRange[] array, int arrayIndex) { | |
| _baseList.CopyTo(array, arrayIndex); | |
| } | |
| public int Count => _baseList.Count; | |
| public bool Remove(ExcelProtectedRange item) { | |
| DeleteAllNode( | |
| "d:protectedRanges/d:protectedRange[@name='" | |
| + item.Name | |
| + "' and @sqref='" | |
| + item.Address.Address | |
| + "']"); | |
| if (_baseList.Count == 0) { | |
| DeleteNode("d:protectedRanges"); | |
| } | |
| return _baseList.Remove(item); | |
| } | |
| public int IndexOf(ExcelProtectedRange item) { | |
| return _baseList.IndexOf(item); | |
| } | |
| public void RemoveAt(int index) { | |
| _baseList.RemoveAt(index); | |
| } | |
| public ExcelProtectedRange this[int index] => _baseList[index]; | |
| IEnumerator<ExcelProtectedRange> IEnumerable<ExcelProtectedRange>.GetEnumerator() { | |
| return _baseList.GetEnumerator(); | |
| } | |
| IEnumerator IEnumerable.GetEnumerator() { | |
| return _baseList.GetEnumerator(); | |
| } | |
| } |