private void ReadGlobals()
		{
			_workbook = new XlsxWorkbook(
				_zipWorker.GetWorkbookStream(),
				_zipWorker.GetWorkbookRelsStream(),
				_zipWorker.GetSharedStringsStream(),
				_zipWorker.GetStylesStream());

			CheckDateTimeNumFmts(_workbook.Styles.NumFmts);

		}
		private void Dispose(bool disposing)
		{
			// Check to see if Dispose has already been called.

			if (!this.disposed)
			{
				if (disposing)
				{
					if (_xmlReader != null) ((IDisposable) _xmlReader).Dispose();
					if (_sheetStream != null) _sheetStream.Dispose();
					if (_zipWorker != null) _zipWorker.Dispose();
				}

				_zipWorker = null;
				_xmlReader = null;
				_sheetStream = null;

				_workbook = null;
				_cellsValues = null;
				_savedCellsValues = null;

				disposed = true;
			}
		}
Beispiel #3
0
        public XlsxWorksheet(ZipWorker document, XlsxWorkbook workbook, SheetRecord refSheet)
        {
            Document = document;
            Workbook = workbook;

            Name             = refSheet.Name;
            Id               = refSheet.Id;
            Rid              = refSheet.Rid;
            VisibleState     = refSheet.VisibleState;
            Path             = refSheet.Path;
            DefaultRowHeight = 15;

            if (string.IsNullOrEmpty(Path))
            {
                return;
            }

            using var sheetStream = Document.GetWorksheetReader(Path);
            if (sheetStream == null)
            {
                return;
            }

            int rowIndexMaximum    = int.MinValue;
            int columnIndexMaximum = int.MinValue;

            List <Column>    columnWidths = new List <Column>();
            List <CellRange> cellRanges   = new List <CellRange>();

            bool inSheetData = false;

            Record record;

            while ((record = sheetStream.Read()) != null)
            {
                switch (record)
                {
                case SheetDataBeginRecord _:
                    inSheetData = true;
                    break;

                case SheetDataEndRecord _:
                    inSheetData = false;
                    break;

                case RowHeaderRecord row when inSheetData:
                    rowIndexMaximum = Math.Max(rowIndexMaximum, row.RowIndex);
                    break;

                case CellRecord cell when inSheetData:
                    columnIndexMaximum = Math.Max(columnIndexMaximum, cell.ColumnIndex);
                    break;

                case ColumnRecord column:
                    columnWidths.Add(column.Column);
                    break;

                case SheetFormatPrRecord sheetFormatProperties:
                    if (sheetFormatProperties.DefaultRowHeight != null)
                    {
                        DefaultRowHeight = sheetFormatProperties.DefaultRowHeight.Value;
                    }
                    break;

                case SheetPrRecord sheetProperties:
                    CodeName = sheetProperties.CodeName;
                    break;

                case MergeCellRecord mergeCell:
                    cellRanges.Add(mergeCell.Range);
                    break;

                case HeaderFooterRecord headerFooter:
                    HeaderFooter = headerFooter.HeaderFooter;
                    break;
                }
            }

            ColumnWidths = columnWidths.ToArray();
            MergeCells   = cellRanges.ToArray();

            if (rowIndexMaximum != int.MinValue && columnIndexMaximum != int.MinValue)
            {
                FieldCount = columnIndexMaximum + 1;
                RowCount   = rowIndexMaximum + 1;
            }
        }