Exemplo n.º 1
0
            public void WriteRow(XmlWriter wr
                                 , IDictionary <string, object> values
                                 , int dstRowNumber
                                 , IDictionary <string, int> sharedIndex
                                 , Func <object, int, string> ChangeFormula
                                 , Func <object, ValueToStrInfo> ValueToStr)
            {
                wr.WriteStartElement(Name);
                int srcnum = 0;

                foreach (var a in Attrs)
                {
                    if (a.Name == "r")
                    {
                        srcnum = Convert.ToInt32(a.Value);
                        wr.WriteAttributeString(a.Name, dstRowNumber.ToString());
                    }
                    else
                    {
                        wr.WriteAttributeString(a.Name, a.Value);
                    }
                }
                int delta = dstRowNumber - srcnum;
                var c     = new RowWriterContext(wr, values, sharedIndex, ChangeFormula, ValueToStr);

                if (subItems != null)
                {
                    foreach (var s in subItems)
                    {
                        s.WriteCell(c, delta);
                    }
                }
                wr.WriteEndElement();
            }
Exemplo n.º 2
0
            void WriteCell(RowWriterContext c, int rowdelta)
            {
                var wr = c.wr;

                wr.WriteStartElement(Name);
                string t = null, v = null, f = null, fmla = null;
                int    si = -1;

                foreach (var a in Attrs)
                {
                    if (a.Name == "r")
                    {
                        object value;
                        if (c.values.TryGetValue(a.Value, out value))
                        {
                            if (value == null)
                            {
                                value = DBNull.Value;
                            }
                            var nfo = c.ValueToStr(value);
                            v = nfo.value;
                            t = nfo.xlsxType;
                            if (t == "fmla")
                            {
                                t    = null;
                                fmla = value.ToString();
                                if (!c.sharedIndex.TryGetValue(fmla, out si))
                                {
                                    si = -1;
                                    f  = c.ChangeFormula(value, rowdelta);
                                    v  = null;
                                }
                                else
                                {
                                    f = string.Empty;
                                }
                            }
                        }
                        wr.WriteAttributeString(a.Name, Xlsx.ChangedCellName(a.Value, rowdelta));
                    }
                    else if (a.Name == "t")
                    {
                        if (t != null)
                        {
                            if (t != string.Empty && v != string.Empty)
                            {
                                wr.WriteAttributeString(a.Name, t);
                            }
                        }
                        else if (t == null && f == null)
                        {
                            wr.WriteAttributeString(a.Name, a.Value);
                        }
                    }
                    else
                    {
                        wr.WriteAttributeString(a.Name, a.Value);
                    }
                }
                if (v != null)
                {   // write value
                    if (v != string.Empty)
                    {
                        wr.WriteStartElement("v"); wr.WriteValue(v); wr.WriteEndElement();
                    }
                }
                else if (f != null)
                {   // write formula
                    //var xf = (subItems == null) ? XmlItem.Empty : subItems.FirstOrDefault(x => x.Name == "f");
                    wr.WriteStartElement("f");
                    //if (!xf.IsEmpty)
                    //{
                    //	wr.WriteStartElement("f");
                    //	if (xf.Attrs != null)
                    //	{
                    //		foreach (var a in xf.Attrs)
                    //			switch (a.Name)
                    //			{
                    //				case "ca":
                    //					wr.WriteAttributeString(a.Name, a.Value);
                    //					break;
                    //				case "shared":
                    //				case "si": // need for t="shared"
                    //				case "ref": // need for t="array" or t="shared"
                    //				case "t": //
                    //				default:
                    //					break;
                    //			}
                    //	}
                    //}
                    wr.WriteValue(f);
                    wr.WriteEndElement();
                }
                else if (subItems != null)
                {
                    foreach (var item in subItems)
                    {
                        item.WritePart(wr);
                    }
                }
                wr.WriteEndElement();
            }