| 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(); |
| } |
| } |
| } |