Ejemplo n.º 1
0
        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;
            }
        }
Ejemplo n.º 2
0
        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;
                            }
                        }
                    }
                }
            }
        }