private ParsingReturnStructure ProcessData2(List <List <String> > table) { NeumKey _nk = new NeumKey(); DataPointList dataPointList = new DataPointList(); List <String> footnotes = new List <string>(); List <String> columnHeaders = new List <string>(); List <DateTime> dates = new List <DateTime>(); List <String> values = new List <String>(); List <Tuple <String, String, DateTime, String, String> > dataPoint = new List <Tuple <string, string, DateTime, string, string> >(); List <Tuple <String, String> > nuemWithValue = new List <Tuple <string, string> >(); List <String> neums = new List <String>(); var rawNeum = table[0][0].ToString(); var formattedNeum = CreateNeum(rawNeum); //var usedRange = ws.UsedRange; foreach (List <String> Row in table) { int Rownum = table.IndexOf(Row); foreach (String Item in Row) { int Colnum = Row.IndexOf(Item); //Console.WriteLine(Item); if ((Rownum == 0) && (Colnum >= 1)) { columnHeaders.Add(Item.ToString()); } else if ((Rownum > 0) && (Colnum == 0)) { dates.Add(FormattedDate(Item.ToString())); } else if ((Rownum > 0) && (Colnum > 0)) { try { Convert.ToDecimal(Item); values.Add(Item); } catch { try { Convert.ToDecimal(Item.Split(')')[1].ToString().Trim()); //Console.WriteLine(Item.Split(')')[1].ToString().Trim()); values.Add(Item.Split(')')[1].ToString().Trim()); } catch { values.Add("-999,999"); } } ; } } } foreach (var col in columnHeaders) { nuemWithValue.Add(new Tuple <string, string>((formattedNeum + "_" + col), (rawNeum + "_" + col))); } var i = 0; foreach (var date in dates) //foreach (Tuple<string, string> nuemWithVal in nuemWithValue) { //foreach(var date in dates) foreach (Tuple <string, string> nuemWithVal in nuemWithValue) { String[] neumAndCatsubstrings = nuemWithVal.Item1.Split('_'); var dp = new DataPoint2017(date, PeriodTypes2017.Annual, Convert.ToDecimal(values[i])); dp.Neum = nuemWithVal.Item1; Guid seriesId = _nk.GetValue(dp.Neum); String seriesName = nuemWithVal.Item1; _nk.AddSeriesName(seriesId, seriesName); dp.ParentSeriesId = seriesId; //dataPoint.Add(new Tuple<string, string, DateTime, string, string>(nuemWithVal.Item1, neumAndCatsubstrings[1], date, "Fiscal Year", values[i])); dataPointList.AddPoint(dp); i++; } } ParsingReturnStructure toReturn = new ParsingReturnStructure(); BGTableInfo tableHere = new BGTableInfo(); tableHere.TableName = rawNeum; int tableLineNum = 0; toReturn.DataPoints.AddList(dataPointList); for (int rowOn = 1; rowOn < columnHeaders.Count; rowOn++) { // int colOn = 1; if (columnHeaders[rowOn] != null && columnHeaders[rowOn].Length > 0) //sometimes there are blank cells that don't need to be processed { tableLineNum++; String seriesName = rawNeum + "_" + columnHeaders[rowOn]; String neum = "arlweb~" + seriesName; neum = _nk.PrettifyNeum(neum); Guid seriesID = _nk.GetValue(neum); BGTableLineInformation tableLineInfo = new BGTableLineInformation(); tableLineInfo.linelabel = columnHeaders[rowOn]; tableLineInfo.tablelineindents = 0; tableLineInfo.tablelinenum = tableLineNum; tableLineInfo.objectID = seriesID; tableHere.Add(tableLineInfo); } } toReturn.NeumKey = _nk; toReturn.TableInfos.Add(tableHere); return(toReturn); }