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(); }
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(); }