private void ReadSheetGlobals(XlsxWorksheet sheet) { _sheetStream = _zipWorker.GetWorksheetStream(sheet.Path); if (null == _sheetStream) return; _xmlReader = XmlReader.Create(_sheetStream); while (_xmlReader.Read()) { if (_xmlReader.NodeType == XmlNodeType.Element && _xmlReader.Name == XlsxWorksheet.N_dimension) { var dimValue = _xmlReader.GetAttribute(XlsxWorksheet.A_ref); if (dimValue.IndexOf(':') > 0) { sheet.Dimension = new XlsxDimension(dimValue); } else { _xmlReader.Close(); _sheetStream.Close(); } break; } } }
private bool ReadSheetRow(XlsxWorksheet sheet) { if (null == _xmlReader) return false; if (_emptyRowCount != 0) { _cellsValues = new object[sheet.ColumnsCount]; _emptyRowCount--; _depth++; return true; } if (_savedCellsValues != null) { _cellsValues = _savedCellsValues; _savedCellsValues = null; _depth++; return true; } if ((_xmlReader.NodeType == XmlNodeType.Element && _xmlReader.Name == XlsxWorksheet.N_row) || _xmlReader.ReadToFollowing(XlsxWorksheet.N_row)) { _cellsValues = new object[sheet.ColumnsCount]; var rowIndex = int.Parse(_xmlReader.GetAttribute(XlsxWorksheet.A_r)); if (rowIndex != (_depth + 1)) { _emptyRowCount = rowIndex - _depth - 1; } var hasValue = false; var a_s = String.Empty; var a_t = String.Empty; var a_r = String.Empty; var col = 0; var row = 0; while (_xmlReader.Read()) { if (_xmlReader.Depth == 2) break; if (_xmlReader.NodeType == XmlNodeType.Element) { hasValue = false; if (_xmlReader.Name == XlsxWorksheet.N_c) { a_s = _xmlReader.GetAttribute(XlsxWorksheet.A_s); a_t = _xmlReader.GetAttribute(XlsxWorksheet.A_t); a_r = _xmlReader.GetAttribute(XlsxWorksheet.A_r); XlsxDimension.XlsxDim(a_r, out col, out row); } else if (_xmlReader.Name == XlsxWorksheet.N_v) { hasValue = true; } } if (_xmlReader.NodeType == XmlNodeType.Text && hasValue) { object o = _xmlReader.Value; if (null != a_t && a_t == XlsxWorksheet.A_s) { o = _workbook.SST[Convert.ToInt32(o)]; } else if (null != a_s) { var xf = _workbook.Styles.CellXfs[int.Parse(a_s)]; if (xf.ApplyNumberFormat && IsDateTimeStyle(xf.NumFmtId) && o != null && o.ToString() != string.Empty) { try { o = DateTime.FromOADate(Convert.ToDouble(o, CultureInfo.InvariantCulture)); } catch { // just don't try and convert it then } } } if (col - 1 < _cellsValues.Length) _cellsValues[col - 1] = o; } } if (_emptyRowCount > 0) { _savedCellsValues = _cellsValues; return ReadSheetRow(sheet); } else _depth++; return true; } _xmlReader.Close(); if (_sheetStream != null) _sheetStream.Close(); return false; }