コード例 #1
0
        internal CellRange(string from, string to)
        {
            int fromColumn, fromRow, toColumn, toRow;

            ReferenceHelper.ParseReference(from, out fromColumn, out fromRow);

            // 0 indexed vs 1 indexed
            FromColumn = fromColumn - 1;
            FromRow    = fromRow - 1;

            ReferenceHelper.ParseReference(to, out toColumn, out toRow);

            // 0 indexed vs 1 indexed
            ToColumn = toColumn - 1;
            ToRow    = toRow - 1;
        }
コード例 #2
0
ファイル: CellRange.cs プロジェクト: Aaron123516/test2
        internal CellRange(string range)
        {
            var fromTo = range.Split(':');

            if (fromTo.Length == 2)
            {
                ReferenceHelper.ParseReference(fromTo[0], out int column, out int row);

                // 0 indexed vs 1 indexed
                FromColumn = column - 1;
                FromRow    = row - 1;

                ReferenceHelper.ParseReference(fromTo[1], out column, out row);

                // 0 indexed vs 1 indexed
                ToColumn = column - 1;
                ToRow    = row - 1;
            }
        }
コード例 #3
0
        private void ReadSheetGlobals(XlsxWorksheet sheet)
        {
            if (_xmlReader != null)
            {
                _xmlReader.Close();
            }
            if (_sheetStream != null)
            {
                _sheetStream.Close();
            }

            string sheetPath = sheet.Path;

            if (sheetPath.StartsWith("/xl/"))
            {
                sheetPath = sheetPath.Substring(4);
            }

            _sheetStream = mZipExtractor.GetStream(XL + sheetPath);

            if (null == _sheetStream)
            {
                return;
            }

            _xmlReader = XmlReader.Create(_sheetStream);

            //count rows and cols in case there is no dimension elements
            int rows = 0;
            int cols = 0;

            _namespaceUri = null;
            int biggestColumn = 0;             //used when no col elements and no dimension

            while (_xmlReader.Read())
            {
                if (_xmlReader.NodeType == XmlNodeType.Element && _xmlReader.LocalName == XlsxWorksheet.N_worksheet)
                {
                    //grab the namespaceuri from the worksheet element
                    _namespaceUri = _xmlReader.NamespaceURI;
                }

                if (_xmlReader.NodeType == XmlNodeType.Element && _xmlReader.LocalName == XlsxWorksheet.N_dimension)
                {
                    string dimValue = _xmlReader.GetAttribute(XlsxWorksheet.A_ref);

                    sheet.Dimension = new XlsxDimension(dimValue);
                    break;
                }

                //removed: Do not use col to work out number of columns as this is really for defining formatting, so may not contain all columns
                //if (_xmlReader.NodeType == XmlNodeType.Element && _xmlReader.LocalName == XlsxWorksheet.N_col)
                //    cols++;

                if (_xmlReader.NodeType == XmlNodeType.Element && _xmlReader.LocalName == XlsxWorksheet.N_row)
                {
                    rows++;
                }

                //check cells so we can find size of sheet if can't work it out from dimension or col elements (dimension should have been set before the cells if it was available)
                //ditto for cols
                if (sheet.Dimension == null && cols == 0 && _xmlReader.NodeType == XmlNodeType.Element && _xmlReader.LocalName == XlsxWorksheet.N_c)
                {
                    var refAttribute = _xmlReader.GetAttribute(XlsxWorksheet.A_r);

                    if (refAttribute != null)
                    {
                        var thisRef = ReferenceHelper.ReferenceToColumnAndRow(refAttribute);
                        if (thisRef[1] > biggestColumn)
                        {
                            biggestColumn = thisRef[1];
                        }
                    }
                }
            }


            //if we didn't get a dimension element then use the calculated rows/cols to create it
            if (sheet.Dimension == null)
            {
                if (cols == 0)
                {
                    cols = biggestColumn;
                }

                if (rows == 0 || cols == 0)
                {
                    sheet.IsEmpty = true;
                    return;
                }

                sheet.Dimension = new XlsxDimension(rows, cols);

                //we need to reset our position to sheet data
                _xmlReader.Close();
                _sheetStream.Close();
                _sheetStream = mZipExtractor.GetStream(XL + sheetPath);
                _xmlReader   = XmlReader.Create(_sheetStream);
            }

            //read up to the sheetData element. if this element is empty then there aren't any rows and we need to null out dimension

            _xmlReader.ReadToFollowing(XlsxWorksheet.N_sheetData, _namespaceUri);
            if (_xmlReader.IsEmptyElement)
            {
                sheet.IsEmpty = true;
            }
        }