| using OfficeOpenXml.Utils; | |
| using System; | |
| using System.Collections.Generic; | |
| using System.Collections.ObjectModel; | |
| using System.Linq; | |
| using System.Text; | |
| using System.Xml; | |
| 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 ExcelProtectedRange(protectedRangeNode.Attributes["name"].Value, new ExcelAddress(SqRefUtility.FromSqRefAddress(protectedRangeNode.Attributes["sqref"].Value)), nsm, topNode)); | |
| } | |
| } | |
| private List<ExcelProtectedRange> _baseList = new List<ExcelProtectedRange>(); | |
| 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, base.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 | |
| { | |
| get { return _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] | |
| { | |
| get | |
| { | |
| return _baseList[index]; | |
| } | |
| } | |
| IEnumerator<ExcelProtectedRange> IEnumerable<ExcelProtectedRange>.GetEnumerator() | |
| { | |
| return _baseList.GetEnumerator(); | |
| } | |
| System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() | |
| { | |
| return _baseList.GetEnumerator(); | |
| } | |
| } | |
| } |