/// <summary> /// Конструктор - основной(без аргументов) /// </summary> public MSExcelIOExportPBRValues() : base() { _date = DateTime.MinValue; _dictValues = new Dictionary <int, IVALUES> (); _mnlResetEventBusy = new ManualResetEvent(false); _timerWiat = new System.Threading.Timer(fTimerWait, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); _timerShedule = new System.Threading.Timer(fTimerShedule, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite); _prevArg = new EventResultArgs() { Result = RESULT.OK }; Mode = AdminTS_KomDisp.ModeDefaultExportPBRValues; }
/// <summary> /// Выполнить операцию размещения значений в книге MS Excel /// , и в автоматическом режиме сохранить ее /// </summary> private void run(object obj) { List <FileInfo> listFileInfoDest; EventResultArgs arg; string pattern = string.Empty; int iTemplate = 0 // признак продолжения выполнения операции - наличие шаблона , err = 0; // по умолчанию ошибок нет try { #if HCLASSLIBRARY_MSEXCELIO if (IsReOpen == true) { ReCreate(); } else { ; } #else #endif // получить шаблон поиска документа pattern = string.Format("*{0}*.{1}", ConstantExportPBRValues.MaskDocument, ConstantExportPBRValues.MaskExtension); Logging.Logg().Action(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - поиск документа: каталог=<{0}>, шаблон=<{1}>...", Folder_CSV, pattern) , Logging.INDEX_MESSAGE.NOT_SET); listFileInfoDest = new List <FileInfo> (Directory.GetFiles(Folder_CSV, pattern, SearchOption.TopDirectoryOnly).ToList() .ConvertAll <FileInfo> (name => new FileInfo(string.Format(@"{0}", name)))); if (listFileInfoDest.Count > 1) { // выполнить сортировку, затем открыть "самый новый" файл listFileInfoDest.Sort((fileInfo1, fileInfo2) => { return((int)(fileInfo1.LastWriteTime - fileInfo2.LastWriteTime).TotalSeconds < 0 ? 1 : (int)(fileInfo1.LastWriteTime - fileInfo2.LastWriteTime).TotalSeconds > 0 ? -1 : 0); }); } else if (listFileInfoDest.Count > 0) { // файл единственный(вероятно, шаблон) - открыть iTemplate = 1; } else { // файл отсутствует - открыть шаблон iTemplate = -1; } if (!(iTemplate < 0)) { #if HCLASSLIBRARY_MSEXCELIO if (IsOpen(Path.GetFileName(listFileInfoDest [0].FullName), out err) == true) { Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - книга с наименованием={0}\\{1} открыта..." , Folder_CSV, TemplateDocument) , Logging.INDEX_MESSAGE.NOT_SET); if (Mode == MODE_EXPORT_PBRVALUES.AUTO) { Visible = !CloseExcelDoc(Path.GetFileName(listFileInfoDest [0].FullName)); } else if (Mode == MODE_EXPORT_PBRVALUES.MANUAL) { Visible = true; } else { ; } #else #endif #if HCLASSLIBRARY_MSEXCELIO } else { if (Visible == true) { Visible = false; } else { ; } } if (Visible == false) #else #endif { if (openDocument(listFileInfoDest [0].FullName) == 0) { Logging.Logg().Debug(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - открыли документ {0}...", listFileInfoDest [0].FullName) , Logging.INDEX_MESSAGE.NOT_SET); #region Заполнить лист книги MS Excel значениями selectWorksheet(1); if (writeValue(ConstantExportPBRValues.NumberColumn_Date, ConstantExportPBRValues.NumberRow_Date, HDateTime.ToMoscowTimeZone().ToString(ConstantExportPBRValues.Format_Date)) == false) { Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - не удалось сохранить дату/время обновления...") , Logging.INDEX_MESSAGE.NOT_SET); } else { Logging.Logg().Action(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - сохранили дату/время обновления [столб.={0}, стр.={1}, знач.={2}]..." , ConstantExportPBRValues.NumberColumn_Date, ConstantExportPBRValues.NumberRow_Date, HDateTime.ToMoscowTimeZone().ToString(ConstantExportPBRValues.Format_Date)) , Logging.INDEX_MESSAGE.NOT_SET); } foreach (KeyValuePair <int, IVALUES> pair in _dictValues) { for (int iHour = 0; iHour < pair.Value.m_data.Length; iHour++) { if (writeValue(pair.Value.m_indxColumn, ConstantExportPBRValues.NumberRow_0 + iHour, pair.Value.m_data [iHour].pbr) == false) { Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - [компонент_ID={0}, час={1}] не удалось сохранить значение {2}" , pair.Key, iHour + 1, pair.Value.m_data [iHour].pbr) , Logging.INDEX_MESSAGE.NOT_SET); } else { ; } } } #endregion _previousNameDocument = NameDocument; save(_previousNameDocument); Logging.Logg().Action(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - сохранили документ {0} с наименованием {1}...", listFileInfoDest [0].FullName, _previousNameDocument) , Logging.INDEX_MESSAGE.NOT_SET); try { listFileInfoDest.ForEach(fi => { if ((_previousNameDocument.Equals(fi.FullName) == false) && (TemplateDocument.Equals(fi.FullName) == false)) { fi.Delete(); } else { ; } }); } catch (Exception e) { Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - ошибка удаления '{0}', причина={1}..." , listFileInfoDest [0].FullName, e.Message) , Logging.INDEX_MESSAGE.NOT_SET); } if (Mode == MODE_EXPORT_PBRVALUES.AUTO) { #if HCLASSLIBRARY_MSEXCELIO CloseExcelDoc(); #else #endif arg = new EventResultArgs() { Result = RESULT.OK }; } else { arg = new EventResultArgs() { Result = RESULT.VISIBLE }; } } else { Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - не удалось открыть книгу MS Excel с наименованием={0}..." , listFileInfoDest [0].FullName) , Logging.INDEX_MESSAGE.NOT_SET); arg = new EventResultArgs() { Result = RESULT.ERROR_OPEN }; } } #if HCLASSLIBRARY_MSEXCELIO else { // Видимость 'true' - ожидать действий пользователя arg = new EventResultArgs() { Result = RESULT.ERROR_RETRY } }; #else #endif } else { Logging.Logg().Error(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - отсутствует шаблон с наименованием={0}\\{1}..." , Folder_CSV, TemplateDocument) , Logging.INDEX_MESSAGE.NOT_SET); arg = new EventResultArgs() { Result = RESULT.ERROR_TEMPLATE }; } } catch (Exception e) { Logging.Logg().Exception(e, string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run () - ..."), Logging.INDEX_MESSAGE.NOT_SET); arg = new EventResultArgs() { Result = RESULT.ERROR_APP }; } // остановить таймер ожидания завершения длительной операции stop_TimerWait(); clearContext(); _mnlResetEventBusy.Reset(); // при внештатном завершении потока - продолжить логгирование и работу приложения в целом try { Logging.Logg().Debug(string.Format("AdminTS_KomDisp.MSExcelIOExportPBRValues::Run() - завершение потока..."), Logging.INDEX_MESSAGE.NOT_SET); } catch { } Result(this, _prevArg = arg); }