Esempio n. 1
0
        private IEnumerable <OpenXmlAttribute> EnumCellProxyAttributes(uint row, uint col, CellProxy cellProxy)
        {
            OpenXmlAttribute iteratorVariable0 = new OpenXmlAttribute {
                LocalName = "r",
                Value     = RowColumn.ToAddress(row, col)
            };

            yield return(iteratorVariable0);

            if (cellProxy.DataType.HasValue)
            {
                OpenXmlAttribute iteratorVariable1 = new OpenXmlAttribute {
                    LocalName = "t",
                    Value     = this.STCellType(cellProxy.DataType.Value)
                };
                yield return(iteratorVariable1);
            }
            if (cellProxy.StyleIndex.HasValue)
            {
                OpenXmlAttribute iteratorVariable2 = new OpenXmlAttribute {
                    LocalName = "s",
                    Value     = cellProxy.StyleIndex.Value.ToString()
                };
                yield return(iteratorVariable2);
            }
        }
        private IEnumerable <OpenXmlAttribute> EnumCellProxyAttributes(uint row, uint col, CellProxy cellProxy)
        {
            yield return(new OpenXmlAttribute()
            {
                LocalName = "r", Value = RowColumn.ToAddress(row, col)
            });

            if (cellProxy.DataType != null)
            {
                yield return(new OpenXmlAttribute()
                {
                    LocalName = "t", Value = STCellType((CellValues)cellProxy.DataType)
                });
            }
            if (cellProxy.StyleIndex != null)
            {
                yield return(new OpenXmlAttribute()
                {
                    LocalName = "s", Value = cellProxy.StyleIndex.Value.ToString()
                });
            }
        }
Esempio n. 3
0
        public void WriteWorksheetPart(OpenXmlWriter writer)
        {
            foreach (KeyValuePair <uint, SortedList <uint, CellProxy> > pair in this._cachedCells.ToList <KeyValuePair <uint, SortedList <uint, CellProxy> > >())
            {
                if (pair.Value.Count == 0)
                {
                    this._cachedCells.Remove(pair.Key);
                }
            }
            foreach (uint num in this._cachedRows.Keys)
            {
                if (!this._cachedCells.ContainsKey(num))
                {
                    this._cachedCells[num] = new SortedList <uint, CellProxy>();
                }
            }
            uint maxValue = uint.MaxValue;
            uint num3     = uint.MaxValue;
            uint row      = 0;
            uint num5     = 0;

            foreach (KeyValuePair <uint, SortedList <uint, CellProxy> > pair2 in this._cachedCells)
            {
                uint key = pair2.Key;
                SortedList <uint, CellProxy> list = pair2.Value;
                if (maxValue == uint.MaxValue)
                {
                    maxValue = key;
                }
                row = key;
                if (list.Count > 0)
                {
                    num3 = Math.Min(num3, list.Keys.First <uint>());
                    num5 = Math.Max(num5, list.Keys.Last <uint>());
                }
            }
            string str  = null;
            string str2 = null;

            if ((maxValue < uint.MaxValue) && (num3 < uint.MaxValue))
            {
                str = RowColumn.ToAddress(maxValue, num3);
                if ((maxValue != row) || (num3 != num5))
                {
                    str2 = RowColumn.ToAddress(row, num5);
                }
            }
            else
            {
                str = "A1";
            }
            writer.WriteStartDocument();
            writer.WriteStartElement(new Worksheet());
            foreach (string str3 in SchemaInfo.WorksheetChildSequence)
            {
                switch (str3)
                {
                case "sheetData":
                    this.WriteSheetData(writer);
                    break;

                case "dimension":
                {
                    string         str4          = str + ((str2 != null) ? (":" + str2) : "");
                    SheetDimension elementObject = new SheetDimension {
                        Reference = str4
                    };
                    writer.WriteElement(elementObject);
                    break;
                }

                case "sheetViews":
                {
                    SheetViews firstElement = this.GetFirstElement <SheetViews>();
                    if (firstElement != null)
                    {
                        foreach (SheetView view in firstElement.Elements <SheetView>())
                        {
                            foreach (Selection selection in view.Elements <Selection>())
                            {
                                if (maxValue < uint.MaxValue)
                                {
                                    selection.ActiveCell           = str;
                                    selection.SequenceOfReferences = new ListValue <StringValue>(new StringValue[] { new StringValue(str) });
                                }
                                else
                                {
                                    selection.Remove();
                                }
                            }
                        }
                        writer.WriteElement(firstElement);
                    }
                    break;
                }

                default:
                    foreach (OpenXmlElement element in this.GetElementsByTagName(str3))
                    {
                        writer.WriteElement(element);
                    }
                    break;
                }
            }
            writer.WriteEndElement();
        }
        public void WriteWorksheetPart(OpenXmlWriter writer)
        {
            // TODO: final cleanup
            // - merge redundant columns
            // - remove unused shared strings

            // Remove rows without cells
            foreach (var rowItem in _cachedCells.ToList())
            {
                if (rowItem.Value.Count == 0)
                {
                    _cachedCells.Remove(rowItem.Key);
                }
            }

            // Simulate rows for cached rows
            foreach (var rowIdx in _cachedRows.Keys)
            {
                if (!_cachedCells.ContainsKey(rowIdx))
                {
                    _cachedCells[rowIdx] = new SortedList <uint, CellProxy>();
                }
            }

            // Get first and last addresses
            uint minRow = uint.MaxValue;
            uint minCol = uint.MaxValue;
            uint maxRow = 0;
            uint maxCol = 0;

            foreach (var rowItem in _cachedCells)
            {
                uint rowIdx = rowItem.Key;
                var  cells  = rowItem.Value;
                if (minRow == uint.MaxValue)
                {
                    minRow = rowIdx;
                }
                maxRow = rowIdx;
                if (cells.Count > 0)
                {
                    minCol = Math.Min(minCol, cells.Keys.First());
                    maxCol = Math.Max(maxCol, cells.Keys.Last());
                }
            }

            string firstAddress = null, lastAddress = null;

            if (minRow < uint.MaxValue && minCol < uint.MaxValue)
            {
                firstAddress = RowColumn.ToAddress(minRow, minCol);
                if (minRow != maxRow || minCol != maxCol)
                {
                    lastAddress = RowColumn.ToAddress(maxRow, maxCol);
                }
            }
            else
            {
                firstAddress = "A1";
            }

            writer.WriteStartDocument();
            writer.WriteStartElement(new Worksheet());
            foreach (string childTagName in SchemaInfo.WorksheetChildSequence)
            {
                if (childTagName == "sheetData")
                {
                    WriteSheetData(writer);
                }
                else if (childTagName == "dimension")
                {
                    string dimensionRef = firstAddress + (lastAddress != null ? ":" + lastAddress : "");
                    writer.WriteElement(new SheetDimension()
                    {
                        Reference = dimensionRef
                    });
                }
                else if (childTagName == "sheetViews")
                {
                    SheetViews svs = GetFirstElement <SheetViews>();
                    if (svs != null)
                    {
                        foreach (SheetView sv in svs.Elements <SheetView>())
                        {
                            foreach (Selection sel in sv.Elements <Selection>())
                            {
                                if (minRow < uint.MaxValue)
                                {
                                    sel.ActiveCell           = firstAddress;
                                    sel.SequenceOfReferences = new ListValue <StringValue>(new StringValue[] { new StringValue(firstAddress) });
                                }
                                else
                                {
                                    sel.Remove();
                                }
                            }
                        }
                        writer.WriteElement(svs);
                    }
                }
                else
                {
                    foreach (var e in GetElementsByTagName(childTagName))
                    {
                        writer.WriteElement(e);
                    }
                }
            }
            writer.WriteEndElement(); // worksheet
        }