public static ExcelDocument LoadMainProfileExcel(string filePath, string infoFileName, string resultFileName, Dictionary <string, string> excelProfileMap)
        {
            List <ExcelQuestionType> infoListContent;
            List <ExcelResult>       answerListContent;
            List <ExcelProfile>      profilesListContent = new List <ExcelProfile>();

            infoListContent   = GetExcelService.GetProfileNamesEP(filePath, infoFileName);
            answerListContent = GetExcelService.GetResultsEP(filePath, resultFileName);

            foreach (var item in excelProfileMap)
            {
                ExcelQuestionType    profileInfo  = infoListContent.SingleOrDefault(info => info.ProfileName == item.Key);
                string               profileType  = profileInfo.GetProfileType();
                List <ExcelQuestion> questions    = GetExcelService.GetQuestionsEP(filePath, item.Value);
                ExcelProfile         excelProfile = new ExcelProfile
                {
                    Id        = profileInfo.Id,
                    Name      = profileInfo.ProfileName,
                    Type      = profileType,
                    Answers   = profileInfo.Answers,
                    Questions = questions
                };
                profilesListContent.Add(excelProfile);
            }

            string documentName = Path.GetFileNameWithoutExtension(filePath);

            return(new ExcelDocument
            {
                DocumentName = documentName,
                AnswerListContent = answerListContent,
                ProfilesListContent = profilesListContent
            });
        }
        public static ExcelDocument LoadMainProfileDB(MainProfile mainProfile)
        {
            List <ExcelResult>  answerListContent   = new List <ExcelResult>();
            List <ExcelProfile> profilesListContent = new List <ExcelProfile>();

            using (profileContext db = new profileContext())
            {
                mainProfile = db.MainProfile.SingleOrDefault(p => p == mainProfile);
                db.Entry(mainProfile).Collection(t => t.Profile).Load();
                db.Entry(mainProfile).Collection(t => t.Questioned).Load();
                foreach (var profileItem in mainProfile.Profile)
                {
                    db.Entry(profileItem).Collection(t => t.Question).Load();
                    db.Entry(profileItem).Collection(t => t.Result).Load();
                    db.Entry(profileItem).Reference(t => t.Type).Load();
                    List <ExcelQuestion> questions = new List <ExcelQuestion>();
                    foreach (var questionItem in profileItem.Question)
                    {
                        if (questionItem.LeftLimit == null && questionItem.RightLimit == null)
                        {
                            questions.Add(new ExcelQuestion {
                                Id = questionItem.SerialNumber, Content = questionItem.Content, LeftLimit = "", RightLimit = ""
                            });
                        }
                        else
                        {
                            questions.Add(new ExcelQuestion {
                                Id = questionItem.SerialNumber, Content = questionItem.Content, LeftLimit = questionItem.LeftLimit, RightLimit = questionItem.RightLimit
                            });
                        }
                    }
                    ExcelProfile excelProfile = new ExcelProfile {
                        Id = profileItem.SerialNumber, Answers = profileItem.Answer, Name = profileItem.Name, Type = profileItem.Type.Type, Questions = questions
                    };
                    profilesListContent.Add(excelProfile);

                    foreach (var resultItem in profileItem.Result)
                    {
                        string      questionedId = mainProfile.Questioned.SingleOrDefault(q => q.Id == resultItem.QuestionedId).Number;
                        ExcelResult excelResult  = new ExcelResult
                        {
                            Id          = questionedId,
                            ProfileNum  = resultItem.Profile.SerialNumber,
                            QuestionNum = resultItem.Question.SerialNumber,
                            Answer      = resultItem.Answer
                        };
                        answerListContent.Add(excelResult);
                    }
                }
                return(new ExcelDocument {
                    DocumentName = mainProfile.Name, AnswerListContent = answerListContent, ProfilesListContent = profilesListContent
                });
            }
        }
Esempio n. 3
0
        private void saveQuestionInfoBtn_Click(object sender, EventArgs e)
        {
            DataGridViewRow selectedDataGridRow = saveQuestionInfoBtn.Tag as DataGridViewRow;
            ExcelQuestion   selectedQuestion    = selectedDataGridRow.Cells["question"].Value as ExcelQuestion;
            ExcelProfile    selectedProfile     = mainTab.SelectedTab.Tag as ExcelProfile;

            string filePath = CommonService.SaveFilePath("*.xlsx|*.xlsx", "Вопрос " + selectedQuestion.Id + " результаты");

            if (filePath != null)
            {
                DataManipulationService.SaveQuestionInfoExcel(selectedQuestion, selectedProfile, Document, filePath);
            }
        }
        public static void SaveQuestionInfoExcel(ExcelQuestion excelQuestion, ExcelProfile excelProfile, ExcelDocument document, string filePath)
        {
            using (ExcelPackage excelPackage = new ExcelPackage())
            {
                var questionInfo    = ProccesingDataService.GetQuestionInfo(excelQuestion, excelProfile, document);
                var points          = questionInfo.Item1;
                var respondedCount  = questionInfo.Item2;
                var questionedCount = questionInfo.Item3;

                excelPackage.Workbook.Properties.Author  = "User";
                excelPackage.Workbook.Properties.Title   = excelQuestion.GetForSeries();
                excelPackage.Workbook.Properties.Created = DateTime.Now;

                ExcelWorksheet infoSheet = excelPackage.Workbook.Worksheets.Add("Результаты");

                int rowInfoNumber = 1;

                infoSheet.Cells[rowInfoNumber, 1].Value = excelProfile.Name;
                rowInfoNumber++;

                int column = WriteRowExcel(new string[] { "Номер вопроса", "Вопрос", "Число ответивших", "Число прошедших" }, points.Keys.ToArray(), infoSheet, 1, rowInfoNumber);
                if (points.ContainsKey("другое"))
                {
                    var questionOpenInfo = ProccesingDataService.GetOpenInfo(excelQuestion, excelProfile, document);;
                    var openPoints       = questionOpenInfo.Item1;
                    WriteRowExcel(new string[] { }, openPoints.Keys.ToArray(), infoSheet, column, rowInfoNumber);
                }
                rowInfoNumber++;

                //-----------------------------------------------
                string[] pointsValue = points.Values.Select(x => x.ToString()).ToArray();
                column = WriteRowExcel(new string[] { excelQuestion.Id.ToString(), excelQuestion.GetForSeries(), respondedCount.ToString(), questionedCount.ToString() }, pointsValue, infoSheet, 1, rowInfoNumber);
                if (points.ContainsKey("другое"))
                {
                    var      questionOpenInfo = ProccesingDataService.GetOpenInfo(excelQuestion, excelProfile, document);;
                    var      openPoints       = questionOpenInfo.Item1;
                    string[] openPointsValue  = openPoints.Values.Select(x => x.ToString()).ToArray();
                    column = WriteRowExcel(new string[] { }, openPointsValue, infoSheet, column, rowInfoNumber);
                }


                infoSheet.Cells[infoSheet.Dimension.Address].AutoFitColumns();
                infoSheet.Column(2).Width          = 125;
                infoSheet.Column(2).Style.WrapText = true;
                FileInfo fi = new FileInfo(filePath);

                excelPackage.SaveAs(fi);
            }
        }
Esempio n. 5
0
        private void openAnswerInfoBtn_Click(object sender, EventArgs e)
        {
            DataGridViewRow selectedDataGridRow = saveQuestionInfoBtn.Tag as DataGridViewRow;
            ExcelQuestion   selectedQuestion    = selectedDataGridRow.Cells["question"].Value as ExcelQuestion;
            ExcelProfile    selectedProfile     = mainTab.SelectedTab.Tag as ExcelProfile;

            Dictionary <ExcelQuestion, Tuple <Dictionary <string, int>, int, int> > questionInfoMap = new Dictionary <ExcelQuestion, Tuple <Dictionary <string, int>, int, int> >();

            questionInfoMap.Add(selectedQuestion, ProccesingDataService.GetOpenInfo(selectedQuestion, selectedProfile, Document));

            using (QuestionInfoForm qif = new QuestionInfoForm())
            {
                qif.QuestionInfoMap = questionInfoMap;
                qif.ShowDialog();
            }
        }
        private void SaveFunctionAccept()
        {
            Dictionary <string, ExcelProfile> excelProfileMap = new Dictionary <string, ExcelProfile>();

            try
            {
                InfoFileName = tableL2.Controls["firstControl"].Text;
                if (string.IsNullOrEmpty(InfoFileName))
                {
                    throw new Exception("Пропущено поле с названием файла с информацией об анкетах.");
                }
                ResultFileName = tableL2.Controls["secondControl"].Text;
                if (string.IsNullOrEmpty(ResultFileName))
                {
                    throw new Exception("Пропущено поле с названием файла с результатами анкетирования.");
                }
                foreach (DataGridViewRow rowItem in chooseDG.Rows)
                {
                    ExcelProfile profile = rowItem.Cells["profile"].Value as ExcelProfile;
                    if (rowItem.Cells["sheetName"].Value == null)
                    {
                        throw new Exception("Пропущено поле с названием файла с вопросами для анкеты \"" + profile.Name + "\".");
                    }
                    string sheetName = rowItem.Cells["sheetName"].Value.ToString();
                    if (string.IsNullOrEmpty(sheetName))
                    {
                        throw new Exception("Пропущено поле с названием файла с вопросами для анкеты \"" + profile.Name + "\".");
                    }
                    else
                    {
                        excelProfileMap.Add(sheetName, profile);
                    }
                }
                ExcelProfileMap = excelProfileMap;

                Status = true;
            }
            catch (Exception ex)
            {
                Status = false;
                MessageBox.Show(ex.Message);
            }
        }
        public static void SaveCSV(string infoFileName, string resultFileName, Dictionary <string, ExcelProfile> excelProfileMap, ExcelDocument document)
        {
            List <List <object> > questionFiles     = new List <List <object> >();
            List <string>         questionFilesName = new List <string>();

            List <object> infoFile = new List <object>();

            foreach (var profileItem in excelProfileMap)
            {
                string       sheetName = profileItem.Key;
                ExcelProfile profile   = profileItem.Value;

                infoFile.Add(new { ID = profile.GetId(), Name = profile.GetName(), Answers = profile.GetAnswers() });

                List <object> questionFile = new List <object>();
                foreach (var questuionItem in profile.Questions)
                {
                    if (!string.IsNullOrEmpty(questuionItem.LeftLimit) && !string.IsNullOrEmpty(questuionItem.RightLimit))
                    {
                        questionFile.Add(new { ID = questuionItem.GetId(), Content = questuionItem.GetContent(), LeftLimit = questuionItem.GetLeftLimit(), RightLimit = questuionItem.GetRightLimit() });
                    }
                    else
                    {
                        questionFile.Add(new { ID = questuionItem.GetId(), Content = questuionItem.GetContent() });
                    }
                }
                questionFiles.Add(questionFile);
                questionFilesName.Add(sheetName);
            }

            List <object> resultFile = new List <object>();

            resultFile.Add(new { ID = "id", Profile = "анкета", QuestionNum = "номер вопроса", Answer = "ответ" });
            foreach (var resultItem in document.AnswerListContent)
            {
                resultFile.Add(new { ID = resultItem.GetId(), Profile = resultItem.GetProfileNum(), QuestionNum = resultItem.GetQuestionNum(), Answer = resultItem.GetAnswer() });
            }

            string selectedPath = CommonService.GetFolderPath();
            string dirName      = selectedPath + "\\" + document.DocumentName;

            if (!Directory.Exists(dirName))
            {
                Directory.CreateDirectory(dirName);
            }
            try
            {
                WriteFile(dirName + "\\" + infoFileName + ".csv", infoFile);
                WriteFile(dirName + "\\" + resultFileName + ".csv", resultFile);

                for (int i = 0; i < questionFiles.Count; i++)
                {
                    WriteFile(dirName + "\\" + questionFilesName[i] + ".csv", questionFiles[i]);
                }
            }
            catch (Exception ex)
            {
                Directory.Delete(dirName, true);
                throw ex;
            }
        }
        public static void SaveExcel(string infoFileName, string resultFileName, Dictionary <string, ExcelProfile> excelProfileMap, ExcelDocument document, string filePath)
        {
            using (ExcelPackage excelPackage = new ExcelPackage())
            {
                excelPackage.Workbook.Properties.Author  = "User";
                excelPackage.Workbook.Properties.Title   = document.DocumentName;
                excelPackage.Workbook.Properties.Created = DateTime.Now;

                ExcelWorksheet infoSheet     = excelPackage.Workbook.Worksheets.Add(infoFileName);
                int            rowInfoNumber = 2;
                foreach (var profileItem in excelProfileMap)
                {
                    string       sheetName = profileItem.Key;
                    ExcelProfile profile   = profileItem.Value;

                    infoSheet.Cells["A" + rowInfoNumber].Value = profile.Id;
                    infoSheet.Cells["B" + rowInfoNumber].Value = profile.Name;
                    infoSheet.Cells["F" + rowInfoNumber].Value = profile.Answers;


                    ExcelWorksheet questionSheet    = excelPackage.Workbook.Worksheets.Add(sheetName);
                    int            rowQuestionIndex = 1;
                    foreach (var questuionItem in profile.Questions)
                    {
                        questionSheet.Cells["A" + rowQuestionIndex].Value = questuionItem.Id;
                        questionSheet.Cells["B" + rowQuestionIndex].Value = questuionItem.Content;

                        if (!string.IsNullOrEmpty(questuionItem.LeftLimit) && !string.IsNullOrEmpty(questuionItem.RightLimit))
                        {
                            questionSheet.Cells["C" + rowQuestionIndex].Value = questuionItem.LeftLimit;
                            questionSheet.Cells["D" + rowQuestionIndex].Value = questuionItem.RightLimit;
                        }

                        rowQuestionIndex++;
                    }

                    rowInfoNumber++;

                    questionSheet.Cells[questionSheet.Dimension.Address].AutoFitColumns();
                }

                ExcelWorksheet resultSheet = excelPackage.Workbook.Worksheets.Add(resultFileName);
                resultSheet.Cells["A1"].Value = "id";
                resultSheet.Cells["B1"].Value = "анкета";
                resultSheet.Cells["C1"].Value = "номер вопроса";
                resultSheet.Cells["D1"].Value = "ответ";

                int rowResultNumber = 2;
                foreach (var answerItem in document.AnswerListContent)
                {
                    resultSheet.Cells["A" + rowResultNumber].Value = answerItem.Id;
                    resultSheet.Cells["B" + rowResultNumber].Value = answerItem.ProfileNum;
                    resultSheet.Cells["C" + rowResultNumber].Value = answerItem.QuestionNum;
                    resultSheet.Cells["D" + rowResultNumber].Value = answerItem.Answer;

                    rowResultNumber++;
                }

                infoSheet.Cells[infoSheet.Dimension.Address].AutoFitColumns();
                resultSheet.Cells[resultSheet.Dimension.Address].AutoFitColumns();

                FileInfo fi = new FileInfo(filePath);

                excelPackage.SaveAs(fi);
            }
        }
Esempio n. 9
0
        public static Tuple <Dictionary <string, int>, int, int> GetQuestionInfo(ExcelQuestion selectedQuestion, ExcelProfile selectedProfile, ExcelDocument selectedDocument)
        {
            var points = GetQuestionPoints(selectedQuestion, selectedProfile, selectedDocument);

            int questionedCount = selectedDocument.AnswerListContent.Where(a => a.ProfileNum == selectedProfile.Id && a.QuestionNum == selectedQuestion.Id).Count();
            int respondedCount  = selectedDocument.AnswerListContent.Where(a => a.ProfileNum == selectedProfile.Id && a.QuestionNum == selectedQuestion.Id && a.Answer != "").Count();

            return(new Tuple <Dictionary <string, int>, int, int>(points, respondedCount, questionedCount));
        }
Esempio n. 10
0
        private static Dictionary <string, int> GetQuestionPoints(ExcelQuestion selectedQuestion, ExcelProfile selectedProfile, ExcelDocument selectedDocument)
        {
            Dictionary <string, int> points = new Dictionary <string, int>();
            var answersList     = selectedProfile.GetProfileAnswers();
            int openAnswerCount = 0;

            foreach (var answerItem in answersList)
            {
                if (answerItem == "другое")
                {
                    var currentResults = selectedDocument.AnswerListContent.Where(a => a.ProfileNum == selectedProfile.Id && a.QuestionNum == selectedQuestion.Id).ToList();
                    foreach (var resultItem in currentResults)
                    {
                        var a = resultItem.GetAnswers(selectedProfile.Type).Except(answersList).ToList();
                        if (a.Count != 0)
                        {
                            openAnswerCount++;
                        }
                    }
                    points.Add(answerItem, openAnswerCount);
                }
                else
                {
                    var countCurrentAnswers = selectedDocument.AnswerListContent.Where(a => a.ProfileNum == selectedProfile.Id && a.QuestionNum == selectedQuestion.Id && a.GetAnswers(selectedProfile.Type).Contains(answerItem)).Count();
                    points.Add(answerItem, countCurrentAnswers);
                }
            }

            return(points);
        }
Esempio n. 11
0
        public static Dictionary <string, int> GetOpenAnswers(ExcelQuestion selectedQuestion, ExcelProfile selectedProfile, ExcelDocument selectedDocument)
        {
            Dictionary <string, int> points = new Dictionary <string, int>();

            var currentResults = selectedDocument.AnswerListContent.Where(a => a.ProfileNum == selectedProfile.Id && a.QuestionNum == selectedQuestion.Id).ToList();

            foreach (var resultItem in currentResults)
            {
                var openAnswers = resultItem.GetAnswers(selectedProfile.Type).Except(selectedProfile.GetProfileAnswers()).ToList();
                if (openAnswers.Count != 0)
                {
                    foreach (var item in openAnswers)
                    {
                        if (points.ContainsKey(item))
                        {
                            points[item]++;
                        }
                        else
                        {
                            points.Add(item, 1);
                        }
                    }
                }
            }

            return(points);
        }