private void GenerateReport_Click(object sender, EventArgs e) { List <string[]> measures, statuses; ReadShownResults(out measures, out statuses); if (measures.Count == 0 && statuses.Count == 0) { MessageBox.Show("Не выбрано ни одной записи для экспорта", "Ошибка экспорта данных", MessageBoxButtons.OK); } else { SaveFileDialog save = new SaveFileDialog(); save.Filter = "xlsx-файлы (*.xlsx)|*.xlsx"; save.CheckFileExists = false; if (save.ShowDialog() == DialogResult.OK) { Thread excelThread = new Thread(ExcelWorker.WriteResults); excelThread.Name = "ExcelWriter"; ExcelExportData data = new ExcelExportData(save.FileName, measures, statuses, Patient); excelThread.Start(data); //MessageBox.Show("Файл успешно сохранен", "Сохранение данных", MessageBoxButtons.OK); } } }
public static void WriteResults(object data) { ExcelExportData resultsInfo = data as ExcelExportData; Excel.Application workExcel = new Excel.Application(); workExcel.Workbooks.Add(); Worksheet sheet = (Worksheet)workExcel.ActiveSheet; int beginRow = 2, beginColumn = 3; WritePatientInfo(sheet, ref beginRow, beginColumn, resultsInfo.patient); beginRow += 2; if (resultsInfo.measures.Count != 0) { // запись состояний здоровья sheet.Cells[beginRow++, beginColumn] = "Записанные измерения прибора"; string[] headers = { "Время", "Измерение" }; WriteHeader(sheet, beginRow++, beginColumn, headers); WriteMeasuredData(sheet, ref beginRow, beginColumn, resultsInfo.measures); beginRow += 3; } if (resultsInfo.statuses.Count != 0) { // запись состояний здоровья sheet.Cells[beginRow++, beginColumn] = "Записанные состояния здоровья"; string[] headers = { "Время", "Запись" }; WriteHeader(sheet, beginRow++, beginColumn, headers); WriteHealthStatuses(sheet, ref beginRow, beginColumn, resultsInfo.statuses); } // выравниваем стобцы ((Excel.Range)sheet.Columns[beginColumn, Type.Missing]).EntireColumn.AutoFit(); ((Excel.Range)sheet.Columns[beginColumn + 1, Type.Missing]).EntireColumn.AutoFit(); sheet.SaveAs(resultsInfo.fileDirectory, Excel.XlFileFormat.xlOpenXMLWorkbook); workExcel.Quit(); }