private void CreateResultSheetContentsAndClearMatrices(ref Hashtable resultWorksheets) { foreach (ResultWorksheet resultWorksheet in resultWorksheets.Values) { XmlDocument resultSheetDocument = new XmlDocument(); string ns = "http://schemas.openxmlformats.org/spreadsheetml/2006/main"; XmlElement worksheet = XLSX.AppendElement(resultSheetDocument, "worksheet", ns); XmlElement sheetData = XLSX.AppendElement(worksheet, "sheetData", ns); int i = 0; foreach (ArrayList cells in resultWorksheet.Matrix) { if (cells == null || cells.Count == 0) { i++; continue; } XmlElement row = XLSX.AppendElement(sheetData, "row", ns); row.SetAttribute("r", Convert.ToString(i)); int j = 0; foreach (XmlElement cell in cells) { if (cell == null) { j++; continue; } string val = cell.InnerText; XmlElement c = XLSX.AppendElement(row, "c", ns); string colName = XLSX.Index2ColumnName(j); c.SetAttribute("r", colName + Convert.ToString(i)); string t = cell.GetAttribute("t"); if (t == "s") { if (val.IndexOf('r') != -1 || val.IndexOf('n') != -1) { c.SetAttribute("s", "4"); } c.SetAttribute("t", "inlineStr"); XmlElement iis = XLSX.AppendElement(c, "is", ns); XmlElement tToo = XLSX.AppendElement(iis, "t", ns); tToo.InnerText = val; } else { string attrName = "n"; bool checkForDateTimeStyle = false; if (t == "b") { attrName = "b"; } else if (t == "e") { attrName = "e"; } else { checkForDateTimeStyle = true; } c.SetAttribute("t", attrName); if (checkForDateTimeStyle) { string formatHint = cell.GetAttribute("f"); if (formatHint.Length > 0) { foreach (GoodDateTimeFormat gdf in goodDateTimeFormats) { if (formatHint == gdf.name) { c.SetAttribute("s", Convert.ToString(gdf.number)); } } } } XmlElement v = XLSX.AppendElement(c, "v", ns); v.InnerText = val; } j++; } i++; } resultWorksheet.Matrix.Clear(); resultWorksheet.Contents = resultSheetDocument; } }
private void MakeRow(XmlNode xlsxRow, XmlElement resultRow) { int lastColSeen = 0; foreach (XmlNode cn in xlsxRow) { if (cn.NodeType == XmlNodeType.Element && cn.LocalName == "c") { XmlElement c = (XmlElement)cn; XmlElement resultCol = (XmlElement)resultRow.AppendChild(resultDoc.CreateElement("Cell")); string columnIdentifier = c.GetAttribute("r"); if (columnIdentifier.Length > 0) { int i = 0; while (Char.IsLetter(columnIdentifier[i])) { ++i; } string colId = columnIdentifier.Substring(0, i); lastColSeen = XLSX.ColumnName2Index(colId); resultCol.SetAttribute("c", colId); } else { lastColSeen++; resultCol.SetAttribute("c", XLSX.Index2ColumnName(lastColSeen)); } resultCol.SetAttribute("n", Convert.ToString(lastColSeen)); minColumn = (lastColSeen < minColumn) ? lastColSeen : minColumn; maxColumn = (lastColSeen > maxColumn) ? lastColSeen : maxColumn; string cf1 = c.GetAttribute("t"); if (cf1.Length == 0) { cf1 = "n"; } // InternalFormatNumber cf2 = InternalFormatNumber.Number; if (cf1 == "inlineStr") { // cf2 = InternalFormatNumber.String; resultCol.SetAttribute("t", "s"); XmlElement iss = XLSX.GetChildElement(c, "is"); if (iss != null) { resultCol.InnerText = iss.InnerText; } } else { XmlElement v = XLSX.FindChildElement(c, "v"); if (v != null) { string textValue = v.InnerText; if (cf1 == "s") { // cf2 = InternalFormatNumber.String; resultCol.SetAttribute("t", "s"); int stringIndex = Int32.Parse(textValue); if (stringIndex < sharedStrings.Count) { resultCol.InnerText = (string)sharedStrings[stringIndex]; } } else { if (cf1 == "str" || cf1 == "e") { resultCol.SetAttribute("t", "s"); } else { resultCol.SetAttribute("t", cf1); } resultCol.InnerText = textValue; } } } } } }