var chartXml = chart.ChartXml;
var nsm = new XmlNamespaceManager(chartXml.NameTable);
var nsuri = chartXml.DocumentElement.NamespaceURI;
nsm.AddNamespace("c", nsuri);
var serNode = chartXml.SelectSingleNode("c:chartSpace/c:chart/c:plotArea/c:barChart/c:ser", nsm);
var catNode = serNode.SelectSingleNode("c:cat", nsm);
var numRefNode = catNode.SelectSingleNode("c:numRef", nsm);
var multiLvlStrRefNode = chartXml.CreateNode(XmlNodeType.Element, "c:multiLvlStrRef", nsuri);
var fNode = chartXml.CreateElement("c:f", nsuri);
fNode.InnerXml = numRefNode.SelectSingleNode("c:f", nsm).InnerXml;
LogUtil.LogInfo(ws.Name + ": Old Inner XML " + fNode.InnerXml);
LogUtil.LogInfo(string.Format("${0}${1}", GetExcelColumnName(GetColumnNumberByName(startColumn) + 1), startRow));
LogUtil.LogInfo(startColumn);
string newInnerXml = fNode.InnerXml.Replace(string.Format("${0}${1}", GetExcelColumnName(GetColumnNumberByName(startColumn) + 1), startRow), string.Format("${0}${1}", startColumn, startRow));
newInnerXml = Regex.Replace(newInnerXml, @"([a-zA-Z]+?)(\d+)", "$$$1$$$2");
LogUtil.LogInfo(ws.Name + ": New Inner XML" + newInnerXml);
fNode.InnerXml = newInnerXml;
multiLvlStrRefNode.AppendChild(fNode);
catNode.ReplaceChild(multiLvlStrRefNode, numRefNode);
var catAxNode = chartXml.SelectSingleNode("c:chartSpace/c:chart/c:plotArea/c:catAx", nsm);
var noMultiLvlLblNode = catAxNode.SelectSingleNode("c:noMultiLvlLbl", nsm);
if (noMultiLvlLblNode == null) {
noMultiLvlLblNode = chartXml.CreateElement("c:noMultiLvlLbl", nsuri);
catAxNode.AppendChild(noMultiLvlLblNode);
var att = noMultiLvlLblNode.Attributes["val"];
att = chartXml.CreateAttribute("val");
noMultiLvlLblNode.Attributes.Append(att);