private void SaveXLS(Patient patient) { if (patient.results.Count > 0) { try { // Открываем приложение application = new Microsoft.Office.Interop.Excel.Application { DisplayAlerts = false }; // Файл шаблона const string template = "resources/template.xlt"; // Открываем книгу workBook = application.Workbooks.Open(Path.Combine(Environment.CurrentDirectory, template)); // Получаем активную таблицу worksheet = workBook.ActiveSheet as Worksheet; // Записываем данные //worksheet.Range["A2"].Value = DateTime.Now; worksheet.Range["A1"].Value = "Название сеанса"; worksheet.Range["B1"].Value = "Дата"; worksheet.Range["C1"].Value = "Продолжительность"; worksheet.Range["D1"].Value = "Горизонтальное отклонение"; worksheet.Range["E1"].Value = "Горизонтальное отклонение (динамика)"; worksheet.Range["F1"].Value = "Вертикальное отклонение"; worksheet.Range["G1"].Value = "Вертикальное отклонение (динамика)"; worksheet.Range["H1"].Value = "Попадания"; worksheet.Range["I1"].Value = "Промахи"; worksheet.Range["J1"].Value = "Баллы"; worksheet.Range["K1"].Value = "Комментарий"; for (int i = 0; i < patient.results.Count; i++) { worksheet.Range["A" + (i + 2).ToString()].Value = patient.results[i].Name; worksheet.Range["B" + (i + 2).ToString()].Value = patient.results[i].Date.ToShortDateString() + " " + patient.results[i].Date.ToShortTimeString(); worksheet.Range["C" + (i + 2).ToString()].Value = patient.results[i].Length.ToString(); worksheet.Range["D" + (i + 2).ToString()].Value = patient.results[i].HorDev.ToString(); worksheet.Range["E" + (i + 2).ToString()].Value = patient.results[i].HorDevDin.ToString(); worksheet.Range["F" + (i + 2).ToString()].Value = patient.results[i].VerDev.ToString(); worksheet.Range["G" + (i + 2).ToString()].Value = patient.results[i].VerDevDin.ToString(); worksheet.Range["H" + (i + 2).ToString()].Value = patient.results[i].Hit.ToString(); worksheet.Range["I" + (i + 2).ToString()].Value = patient.results[i].Miss.ToString(); worksheet.Range["J" + (i + 2).ToString()].Value = patient.results[i].Balls.ToString(); worksheet.Range["K" + (i + 2).ToString()].Value = patient.results[i].Comment; } bufar = patient.AverageResult(); worksheet.Range["A" + (patient.results.Count + 4).ToString()].Value = "Средний результат"; worksheet.Range["C" + (patient.results.Count + 4).ToString()].Value = bufar.Length.ToString(); worksheet.Range["D" + (patient.results.Count + 4).ToString()].Value = bufar.HorDev.ToString(); worksheet.Range["E" + (patient.results.Count + 4).ToString()].Value = bufar.HorDevDin.ToString(); worksheet.Range["F" + (patient.results.Count + 4).ToString()].Value = bufar.VerDev.ToString(); worksheet.Range["G" + (patient.results.Count + 4).ToString()].Value = bufar.VerDevDin.ToString(); worksheet.Range["H" + (patient.results.Count + 4).ToString()].Value = bufar.Hit.ToString(); worksheet.Range["I" + (patient.results.Count + 4).ToString()].Value = bufar.Miss.ToString(); worksheet.Range["J" + (patient.results.Count + 4).ToString()].Value = bufar.Balls.ToString(); worksheet.Range["K" + (patient.results.Count + 4).ToString()].Value = bufar.Comment; bufbr = patient.BestResults(); worksheet.Range["A" + (patient.results.Count + 5).ToString()].Value = "Лучший результат"; worksheet.Range["C" + (patient.results.Count + 5).ToString()].Value = bufbr.Length.ToString(); worksheet.Range["D" + (patient.results.Count + 5).ToString()].Value = bufbr.HorDev.ToString(); worksheet.Range["E" + (patient.results.Count + 5).ToString()].Value = bufbr.HorDevDin.ToString(); worksheet.Range["F" + (patient.results.Count + 5).ToString()].Value = bufbr.VerDev.ToString(); worksheet.Range["G" + (patient.results.Count + 5).ToString()].Value = bufbr.VerDevDin.ToString(); worksheet.Range["H" + (patient.results.Count + 5).ToString()].Value = bufbr.Hit.ToString(); worksheet.Range["I" + (patient.results.Count + 5).ToString()].Value = bufbr.Miss.ToString(); worksheet.Range["J" + (patient.results.Count + 5).ToString()].Value = bufbr.Balls.ToString(); worksheet.Range["K" + (patient.results.Count + 5).ToString()].Value = bufbr.Comment; //сохранение SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "Таблица результатов пациентов (*.xls)|*.xls"; sfd.FileName = patient.Name + "_результаты" + ".xls"; if (sfd.ShowDialog() == System.Windows.Forms.DialogResult.OK) workBook.SaveAs(sfd.FileName); //закрытие процесса if (application != null) { int excelProcessId = -1; GetWindowThreadProcessId(application.Hwnd, ref excelProcessId); Marshal.ReleaseComObject(worksheet); workBook.Close(); Marshal.ReleaseComObject(workBook); application.Quit(); Marshal.ReleaseComObject(application); application = null; // Прибиваем висящий процесс try { Process process = Process.GetProcessById(excelProcessId); process.Kill(); } finally { } } } catch (Exception) { MessageBox.Show("Произошла непредвиденная ошибка, попробуйте ещё раз", "Внимание"); } } }
//загрузка информации private void FinishShowInfo(Patient patient) { try { //создание файла if (!((patient.currentSession != -1 && patient.currentSession < patient.sessions.Count) && (patient.currentLevel != -1 && patient.currentLevel < patient.levels.Count))) { MessageBox.Show("Ошибка создания файла, возможно невыбраны какие-то параметры", "Внимание"); return; } pictureBoxFinishLoading.Image = Gamma.Properties.Resources.loading; pictureBoxFinishLoading.Visible = true; //создание файла SaveFileDialog sfd = new SaveFileDialog(); InnerData.Write("buf.gsf", new InnerData(patient)); //запуск лаунчера Process visual = new Process(); visual.StartInfo.FileName = "gammaLauncher.exe"; visual.StartInfo.Arguments = string.Format("-load \"{0}\"", "buf.gsf"); visual.Start(); visual.WaitForExit(); //удаление файла if (File.Exists("buf.gsf")) File.Delete("buf.gsf"); //считывание результатов if (File.Exists(resultsFile)) ResultsToPatients(); else { MessageBox.Show("Невозможно считать файл результатов, возможно сеанс не завершен или файл поврежден", "Внимание"); return; } pictureBoxFinishLoading.Image = null; pictureBoxFinishLoading.Visible = false; MessageBox.Show("Поздравляем с успешным окончанием сеанса", "Внимание"); //вывод результатов на панель patient = patientsList.patients[patientsList.currentPatient]; textBoxFinishPacient.Text = patient.Name; if (patient.results.Count > 0) { textBoxFinishBalls.Text = patient.results[patient.results.Count - 1].Balls.ToString(); listViewFinishCurrentResult.Items.Clear(); listViewFinishCurrentResult.Items.Add(new ListViewItem(new string[] {patient.results.Count.ToString(), patient.results[patient.results.Count - 1].Name + " " + patient.results[patient.results.Count - 1].Date.ToString(), patient.results[patient.results.Count - 1].Length.ToString(), patient.results[patient.results.Count - 1].HorDev.ToString(), patient.results[patient.results.Count - 1].HorDevDin.ToString(), patient.results[patient.results.Count - 1].VerDev.ToString(), patient.results[patient.results.Count - 1].VerDevDin.ToString(), patient.results[patient.results.Count - 1].Hit.ToString(), patient.results[patient.results.Count - 1].Miss.ToString(), patient.results[patient.results.Count - 1].Balls.ToString() })); listViewFinishResults.Items.Clear(); listViewFinishResults.Items.Add(new ListViewItem(new string[] { "Среднее по сеансам", patient.AverageResult().Length.ToString(), patient.AverageResult().HorDev.ToString(), patient.AverageResult().HorDevDin.ToString(), patient.AverageResult().VerDev.ToString(), patient.AverageResult().VerDevDin.ToString(), patient.AverageResult().Hit.ToString(), patient.AverageResult().Miss.ToString(), patient.AverageResult().Balls.ToString() })); listViewFinishResults.Items.Add(new ListViewItem(new string[] { "Лучшее по сеансам", patient.BestResults().Length.ToString(), patient.BestResults().HorDev.ToString(), patient.BestResults().HorDevDin.ToString(), patient.BestResults().VerDev.ToString(), patient.BestResults().VerDevDin.ToString(), patient.BestResults().Hit.ToString(), patient.BestResults().Miss.ToString(), patient.BestResults().Balls.ToString() })); } else { MessageBox.Show("Не обнаружено ни одного результата. Возможно, был поврежден файл данных", "Внимание"); } } catch(Exception) { MessageBox.Show("Во время запуска или выполнения сеанса произошла ошибка, попробуйте еще раз или запустите сеанс из отдельного файла.", "Внимание"); } }
//загрузка информации в окно private void ResultsShowInfo(Patient patient) { resPatient = patient; textBoxResultsPatient.Text = patient.Name; textBoxResultsPacientDoneSessions.Text = patient.results.Count.ToString() + " сеансов"; if (patient.results.Count >= 1) { int time = 0; for (int i = 0; i < patient.results.Count; i++) { time += patient.results[i].Length; } int minutes = time / 60; time -= minutes * 60; textBoxResultsPacientDoneTime.Text = minutes.ToString() + "мин " + time.ToString() + "сек"; textBoxResultsPacientFirst.Text = patient.results[0].Date.ToString(); textBoxResultsPacientsLatest.Text = patient.results[patient.results.Count - 1].Date.ToString(); //среднее и максимальное listViewResultsSum.Items.Clear(); listViewResultsSum.Items.Add(new ListViewItem(new string[] { "Среднее по сеансам", patient.AverageResult().Length.ToString(), patient.AverageResult().HorDev.ToString(), patient.AverageResult().HorDevDin.ToString(), patient.AverageResult().VerDev.ToString(), patient.AverageResult().VerDevDin.ToString(), patient.AverageResult().Hit.ToString(), patient.AverageResult().Miss.ToString(), patient.AverageResult().Balls.ToString() })); listViewResultsSum.Items.Add(new ListViewItem(new string[] { "Лучшее по сеансам", patient.BestResults().Length.ToString(), patient.BestResults().HorDev.ToString(), patient.BestResults().HorDevDin.ToString(), patient.BestResults().VerDev.ToString(), patient.BestResults().VerDevDin.ToString(), patient.BestResults().Hit.ToString(), patient.BestResults().Miss.ToString(), patient.BestResults().Balls.ToString() })); //список listViewResults.Items.Clear(); for (int i = 0; i < patient.results.Count; i++) { listViewResults.Items.Add(new ListViewItem(new string[] { (i+1).ToString(), patient.results[i].date.ToString() + " '" + patient.results[i].name +"'", patient.results[i].Length.ToString(), patient.results[i].HorDev.ToString(), patient.results[i].HorDevDin.ToString(), patient.results[i].VerDev.ToString(), patient.results[i].VerDevDin.ToString(), patient.results[i].Hit.ToString(), patient.results[i].Miss.ToString(), patient.results[i].Balls.ToString() })); } } }