private void ImportRow(XmlReader reader) { bool isEmpty = reader.IsEmptyElement; int rowIndex = _Rows.Count; double height = -1; XmlStyle style = null; bool hidden = false; foreach (XmlReaderAttributeItem xa in reader.GetAttributes()) { if (xa.LocalName == "Height" && xa.HasValue) { xa.Value.ParseToInt(out height); } if (xa.LocalName == "Index" && xa.HasValue) { xa.Value.ParseToInt(out rowIndex); rowIndex--; } if (xa.LocalName == "StyleID" && xa.HasValue) { style = ParentBook.GetStyleByID(xa.Value); } if (xa.LocalName == "Hidden" && xa.HasValue) { hidden = xa.Value == "1"; } } Row row = GetRowByIndex(rowIndex); row.Hidden = hidden; if (height != -1) { row.Height = height; } if (style != null) { row.Style = style; } if (isEmpty) { return; } while (reader.Read() && !(reader.Name == "Row" && reader.NodeType == XmlNodeType.EndElement)) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Cell") { ImportCell(reader, row); } } } }
internal void Import(XmlReader reader) { foreach (XmlReaderAttributeItem xa in reader.GetAttributes()) { if (xa.LocalName == "Name" && xa.HasValue) { Name = xa.Value; } if (xa.LocalName == "StyleID" && xa.HasValue) { Style = ParentBook.GetStyleByID(xa.Value); } } while (reader.Read() && !(reader.Name == "Worksheet" && reader.NodeType == XmlNodeType.EndElement)) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Names": { ExcelXmlWorkbook.ImportNamedRanges(reader, GetParentBook(), this); break; } case "Table": { ImportTable(reader); break; } case "WorksheetOptions": { ImportOptions(reader); break; } } } } }
private void ImportCell(XmlReader reader, Row row) { bool isEmpty = reader.IsEmptyElement; int cellIndex = row._Cells.Count; int mergeDown = 0; int mergeAcross = 0; XmlStyle style = null; string formula = ""; string reference = ""; foreach (XmlReaderAttributeItem xa in reader.GetAttributes()) { if (xa.LocalName == "Index" && xa.HasValue) { xa.Value.ParseToInt(out cellIndex); cellIndex--; } if (xa.LocalName == "StyleID" && xa.HasValue) { style = ParentBook.GetStyleByID(xa.Value); } if (xa.LocalName == "HRef" && xa.HasValue) { reference = xa.Value; } if (xa.LocalName == "Formula" && xa.HasValue) { formula = xa.Value; } if (xa.LocalName == "MergeAcross" && xa.HasValue) { xa.Value.ParseToInt(out mergeAcross); } if (xa.LocalName == "MergeDown" && xa.HasValue) { xa.Value.ParseToInt(out mergeDown); } } Cell cell = Cells(cellIndex, row.RowIndex); if (style != null) { cell.Style = style; } if (!reference.IsNullOrEmpty()) { cell.HRef = reference; } if (!formula.IsNullOrEmpty()) { FormulaParser.Parse(cell, formula); return; } if (isEmpty) { return; } if (mergeDown > 0 || mergeAcross > 0) { cell.MergeStart = true; Range range = new Range(cell, Cells(cellIndex + mergeAcross, row.RowIndex + mergeDown)); _MergedCells.Add(range); cell.ColumnSpan = range.ColumnCount; cell.RowSpan = range.RowCount; } while (reader.Read() && !(reader.Name == "Cell" && reader.NodeType == XmlNodeType.EndElement)) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name == "Data") { ImportCellData(reader, cell); } else if (reader.Name == "Comment") { ImportCellComment(reader, cell); } } } }
private void ImportTable(XmlReader reader) { if (reader.IsEmptyElement) { return; } int column = 0; while (reader.Read() && !(reader.Name == "Table" && reader.NodeType == XmlNodeType.EndElement)) { if (reader.NodeType == XmlNodeType.Element) { switch (reader.Name) { case "Column": { double width = 0; bool hidden = false; int span = 1; XmlStyle style = null; foreach (XmlReaderAttributeItem xa in reader.GetAttributes()) { if (xa.LocalName == "Width" && xa.HasValue) { double d; if (xa.Value.ParseToInt(out d)) { width = d; } } if (xa.LocalName == "Hidden" && xa.HasValue) { hidden = xa.Value == "1"; } if (xa.LocalName == "Index" && xa.HasValue) { xa.Value.ParseToInt(out column); } if (xa.LocalName == "Span" && xa.HasValue) { xa.Value.ParseToInt(out span); } if (xa.LocalName == "StyleID" && xa.HasValue) { style = ParentBook.GetStyleByID(xa.Value); } } for (int i = 1; i <= span; i++) { Columns(column).Width = width; Columns(column).Hidden = hidden; if (style != null) { Columns(column).Style = style; } column++; } break; } case "Row": { ImportRow(reader); break; } } } } }