public HedgesSetupVM(ExcelDataSet excelDataSet, HedgesSettings settings)
        {
            _excelDataSet = excelDataSet;
            _settings = settings;

            var availableVariableNames = GetAvailableVariableNames().ToList();
            AvailableVariables = new ObservableCollection<string>(availableVariableNames);
            AvailableGroups = new ObservableCollection<string>(availableVariableNames);

            AvailableFirstValues = new ObservableCollection<string>();
            AvailableSecondValues = new ObservableCollection<string>();
        }
        public List<object> GenerateTrialResult(ExcelDataSet dataSet)
        {
            var result = new List<dynamic>();

            var generetedType = GenerateType(dataSet.TrialDataRows[0].Values);

            for (var i = 1; i < dataSet.TrialDataRows.Count; i++)
            {
                var generatedObject = GenerateObject(generetedType, dataSet.TrialDataRows[i].Values);
                result.Add(generatedObject);
            }

            return result;
        }
        public ExcelDataSet GetCellValues(string fileName)
        {
            using (var document = SpreadsheetDocument.Open(fileName, false))
            {
                var wbPart = document.WorkbookPart;
                var sheet = wbPart.Workbook.Descendants<Sheet>().FirstOrDefault();

                if (sheet == null)
                {
                    throw new InvalidOperationException("There is no worksheet in the excel document.");
                }

                var wsPart = (WorksheetPart)(wbPart.GetPartById(sheet.Id));
                var cells = wsPart.Worksheet.Descendants<Cell>();

                var cellList = new List<ExcelSheetValue>();
                int columnCount = 0;
                int rowCount = 0;
                foreach (var cell in cells)
                {
                    var sheetValue = _cellParser.ParseCell(wbPart, cell);
                    cellList.Add(sheetValue);
                    if(sheetValue.Coordinates.Column > columnCount)
                    {
                        columnCount = sheetValue.Coordinates.Column;
                    }

                    if(sheetValue.Coordinates.Row > rowCount)
                    {
                        rowCount = sheetValue.Coordinates.Row;
                    }
                }

                var trialDataSet = new ExcelDataSet(rowCount);
                for (var i = 0; i < rowCount+1; i++)
                {
                    var row = new ExcelDataRow(columnCount+1);
                    trialDataSet.TrialDataRows.Add(row);

                    int i1 = i;
                    foreach (var excelSheetValue in cellList.Where(excelSheetValue => excelSheetValue.Coordinates.Row == i1))
                    {
                        row.Values[excelSheetValue.Coordinates.Column] = excelSheetValue.Value;
                    }
                }

                return trialDataSet;
            }
        }
        public ExcelDataSet GetCellValues(string fileName)
        {
            using (var document = SpreadsheetDocument.Open(fileName, false))
            {
                var wbPart = document.WorkbookPart;
                var sheet  = wbPart.Workbook.Descendants <Sheet>().FirstOrDefault();

                if (sheet == null)
                {
                    throw new InvalidOperationException("There is no worksheet in the excel document.");
                }

                var wsPart = (WorksheetPart)(wbPart.GetPartById(sheet.Id));
                var cells  = wsPart.Worksheet.Descendants <Cell>();

                var cellList    = new List <ExcelSheetValue>();
                int columnCount = 0;
                int rowCount    = 0;
                foreach (var cell in cells)
                {
                    var sheetValue = _cellParser.ParseCell(wbPart, cell);
                    cellList.Add(sheetValue);
                    if (sheetValue.Coordinates.Column > columnCount)
                    {
                        columnCount = sheetValue.Coordinates.Column;
                    }

                    if (sheetValue.Coordinates.Row > rowCount)
                    {
                        rowCount = sheetValue.Coordinates.Row;
                    }
                }

                var trialDataSet = new ExcelDataSet(rowCount);
                for (var i = 0; i < rowCount + 1; i++)
                {
                    var row = new ExcelDataRow(columnCount + 1);
                    trialDataSet.TrialDataRows.Add(row);

                    int i1 = i;
                    foreach (var excelSheetValue in cellList.Where(excelSheetValue => excelSheetValue.Coordinates.Row == i1))
                    {
                        row.Values[excelSheetValue.Coordinates.Column] = excelSheetValue.Value;
                    }
                }

                return(trialDataSet);
            }
        }
        public CohensSetupVM(ExcelDataSet excelDataSet, CohensSettings cohensSettings)
        {
            _cohensSettings = cohensSettings;

            AvailableFirstVariables =
                new ObservableCollection<string>(excelDataSet.TrialDataRows[0].Values.Select(p => p.ToString()));
            AvailableFirstVariables.Insert(0, string.Empty);

            AvailableSecondVariables =
                new ObservableCollection<string>(excelDataSet.TrialDataRows[0].Values.Select(p => p.ToString()));
            AvailableSecondVariables.Insert(0, string.Empty);

            AvailableFilterVariables =
                new ObservableCollection<string>(excelDataSet.TrialDataRows[0].Values.Select(p => p.ToString()));
            AvailableFilterVariables.Insert(0, string.Empty);
        }
        public ExpandoObject CreateDynamicData(ExcelDataSet excelDataSet)
        {
            var data = _trialResultGenerator.GenerateTrialResult(excelDataSet);

            var t = data[0].GetType();
            var list = (IList)Activator.CreateInstance((typeof(List<>).MakeGenericType(t)));

            foreach (var o in data)
            {
                list.Add(o);
            }

            dynamic result = new ExpandoObject();
            result.Data = list;

            return result;
        }
        private void RemoveColumnsWithIndices(List <int> indicesOfColumnsToRemove, ExcelDataSet excelDataSet)
        {
            foreach (var trialDataRow in excelDataSet.TrialDataRows)
            {
                var values = new string[trialDataRow.Values.Length - indicesOfColumnsToRemove.Count];
                int currentIndexInNewArray = 0;
                for (int i = 0; i < trialDataRow.Values.Length; i++)
                {
                    if (indicesOfColumnsToRemove.Contains(i))
                    {
                        continue;
                    }

                    values[currentIndexInNewArray++] = trialDataRow.Values[i];
                }

                trialDataRow.Values = values;
            }
        }
        private void RemoveColumnsWithIndices(List<int> indicesOfColumnsToRemove, ExcelDataSet excelDataSet)
        {
            foreach (var trialDataRow in excelDataSet.TrialDataRows)
            {
                var values = new string[trialDataRow.Values.Length - indicesOfColumnsToRemove.Count];
                int currentIndexInNewArray = 0;
                for (int i = 0; i < trialDataRow.Values.Length; i++)
                {
                    if (indicesOfColumnsToRemove.Contains(i))
                    {
                        continue;
                    }

                    values[currentIndexInNewArray++] = trialDataRow.Values[i];
                }

                trialDataRow.Values = values;
            }
        }
        private List <int> FindIndicesOfColumnsThatContainValuesOtherThanDouble(ExcelDataSet excelDataSet)
        {
            var indicesOfColumnsToRemove = new List <int>();

            for (int i = 1; i < excelDataSet.TrialDataRows.Count; i++)
            {
                for (int k = 0; k < excelDataSet.TrialDataRows[i].Values.Length; k++)
                {
                    double doubleValue;
                    if (!double.TryParse(excelDataSet.TrialDataRows[i].Values[k], out doubleValue) &&
                        excelDataSet.TrialDataRows[i].Values[k] != null)
                    {
                        if (!indicesOfColumnsToRemove.Contains(k))
                        {
                            indicesOfColumnsToRemove.Add(k);
                        }
                    }
                }
            }

            return(indicesOfColumnsToRemove);
        }
        private List<int> FindIndicesOfColumnsThatContainValuesOtherThanDouble(ExcelDataSet excelDataSet)
        {
            var indicesOfColumnsToRemove = new List<int>();

            for (int i = 1; i < excelDataSet.TrialDataRows.Count; i++)
            {
                for (int k = 0; k < excelDataSet.TrialDataRows[i].Values.Length; k++)
                {
                    double doubleValue;
                    if (!double.TryParse(excelDataSet.TrialDataRows[i].Values[k], out doubleValue) &&
                        excelDataSet.TrialDataRows[i].Values[k] != null)
                    {
                        if (!indicesOfColumnsToRemove.Contains(k))
                        {
                            indicesOfColumnsToRemove.Add(k);
                        }
                    }
                }
            }

            return indicesOfColumnsToRemove;
        }
        private List<double> GetFilterVariableValues(CohensSettings cohensSettings, ExcelDataSet excelDataSet)
        {
            List<double> filterVariableValues = null;
            if (!string.IsNullOrEmpty(cohensSettings.SelectedFilterVariable))
            {
                filterVariableValues = GetVariableValues(cohensSettings.SelectedFilterVariable, excelDataSet);
            }

            return filterVariableValues;
        }
        private List<double> GetVariableValues(string selectedFilterVariable, ExcelDataSet excelDataSet)
        {
            if (string.IsNullOrEmpty(selectedFilterVariable))
            {
                return null;
            }

            var result = new List<double>();
            var indexOfColumn = excelDataSet.TrialDataRows[0].Values.ToList().IndexOf(selectedFilterVariable);

            for (int i = 1; i < excelDataSet.TrialDataRows.Count; i++)
            {
                var value = excelDataSet.TrialDataRows[i].Values[indexOfColumn] ?? string.Empty;

                if (value == string.Empty)
                {
                    result.Add(double.NaN);
                }
                else
                {
                    double doubleValue;
                    if (double.TryParse(value, out doubleValue))
                    {
                        result.Add(doubleValue);
                    }
                    else
                    {
                        throw new InvalidOperationException(
                            "The provided value cannot be converted to double precision number.");
                    }
                }
            }

            return result;
        }
 public CohensCalculator(ExcelDataSet excelDataSet, CohensSettings cohensSettings)
 {
     _excelDataSet = excelDataSet;
     _cohensSettings = cohensSettings;
 }
        public void ReduceToColumnsWithDoubleValues(ExcelDataSet excelDataSet)
        {
            var indicesOfColumnsToRemove = FindIndicesOfColumnsThatContainValuesOtherThanDouble(excelDataSet);

            RemoveColumnsWithIndices(indicesOfColumnsToRemove, excelDataSet);
        }
 public void ReduceToColumnsWithDoubleValues(ExcelDataSet excelDataSet)
 {
     var indicesOfColumnsToRemove = FindIndicesOfColumnsThatContainValuesOtherThanDouble(excelDataSet);
     RemoveColumnsWithIndices(indicesOfColumnsToRemove, excelDataSet);
 }
 public HedgesCalculator(ExcelDataSet excelDataSet, HedgesSettings hedgesSettings)
 {
     _excelDataSet = excelDataSet;
     _hedgesSettings = hedgesSettings;
 }
 private void OpenExcelSheet(string filename)
 {
     _excelDataSet = _excelImporter.GetCellValues(filename);
     _columnReducer.ReduceToColumnsWithDoubleValues(_excelDataSet);
     Expando = _dynamicListGenerator.CreateDynamicData(_excelDataSet);
 }