public void TestExcelExample1() { string pathExcel = Path.Combine(Environment.CurrentDirectory, "Data\\Example1.xlsx"); string pathTemp = TestLibrary.getTempFilename(".dbf"); Xml_Form form = generateForm(); Excel excel = new Excel(); DBF dbf = new DBF(pathTemp, form.DBF); try { excel.OpenWorksheet(pathExcel); Work work = new Work(excel.worksheet, form, 120); Logger.LogLevel old_level = Logger.Level; Logger.SetLevel(Logger.LogLevel.TRACER); work.IterateRecords(dbf.appendRecord); Logger.SetLevel(old_level); } finally { dbf.close(); excel.close(); } }
public void Startup() { Logger.SetLevel(Logger.LogLevel.DEBUG); encoding = Encoding.UTF8; fields = TestRepository.getFields(); variables = TestRepository.getVariables(); dbfFileName = Path.GetTempFileName(); dbf = new DBF(dbfFileName, fields, encoding); dbf.appendRecord(variables); Assert.AreEqual(dbf.Writed, 1); dbf.close(); }
/// <summary> /// Основной поток обработки /// </summary> /// <param name="obj">Форма процесса обработки, главная форма, список файлов для обработки</param> protected void delegate_action(object obj) { object [] data = (object[])obj; StatusWindow window = (StatusWindow)data[0]; MainWindow wmain = (MainWindow)data[1]; List <string> files = (List <string>)data[2]; window.setState(true, "Подготовка файлов", 0, files.Count); wmain.Log(DataLog.LogImage.NONE, DateTime.Now.ToString("Начало конвертации dd.MM.yyyy в HH:mm:ss")); wmain.Log(DataLog.LogImage.NONE, "Директория: " + LastLaunch.Default.inputDirectory); wmain.Log(DataLog.LogImage.NONE, "Задано файлов для обработки: " + files.Count); if (config.only_rules) { CheckRules(files, window, wmain); return; } int errcount = 0; bool reopenExcel = true; Excel excel = null; DBF dbf = null; Stopwatch totalwatch = Stopwatch.StartNew(); for (int idoc = 0; idoc < files.Count; idoc++) { string pathFull = files[idoc]; string filename = Path.GetFileName(pathFull); string pathTemp = Path.GetTempFileName(); bool deleteDbf = false; if (reopenExcel) { excel = new Excel(); reopenExcel = false; } try { Logger.info(""); Logger.debug(""); Logger.debug("=============================================================="); Logger.info($"======= Загружаем Excel документ: {filename} ======"); Logger.debug("=============================================================="); window.updateState(true, $"Документ: {filename}", idoc); excel.OpenWorksheet(pathFull); var form = findCorrectForm(excel.worksheet, config); if (form == null) { string warning = $"Для документа '{filename}' не найдено подходящих форм обработки!"; Logger.warn(warning); wmain.Log(DataLog.LogImage.WARNING, warning); throw new ArgumentNullException(warning); } string fileName = getOutputFilename(excel.worksheet, pathFull, config.outfile.simple, config.outfile.script); string pathOutput = Path.Combine(LastLaunch.Default.outputDirectory, fileName); dbf = new DBF(pathTemp, form.DBF); var total = excel.worksheet.UsedRange.Rows.Count - form.Fields.StartY; window.setState(false, $"Обработано записей: {0}/{total}", 0, total); Work work = new Work(form, config.buffer_size); TimeSpan elapsed = work.IterateRecords(excel.worksheet, dbf.appendRecord, id => window.updateState(false, $"Обработано записей: {id}/{total}", id) ); dbf.close(); // Перемещение файла if (File.Exists(pathOutput)) { File.Delete(pathOutput); } File.Move(pathTemp, pathOutput); Logger.debug($"Перемещение файла с {pathTemp} в {pathOutput}"); wmain.Log( DataLog.LogImage.SUCCESS, $"Документ '{filename}' в {dbf.Writed} строк успешно обработан за {elapsed:hh\\:mm\\:ss\\.ff}." ); outlog.Add($"{filename} в {dbf.Writed} строк за {elapsed:hh\\:mm\\:ss\\.ff}"); Logger.info("Времени потрачено на обработку данных: " + elapsed); Logger.info("Обработано записей: " + dbf.Writed); Logger.debug($"Начиная с {form.Fields.StartY} по {form.Fields.StartY + dbf.Writed}"); Logger.info($"=============== Документ {Path.GetFileName(pathFull)} успешно обработан! ==============="); } catch (Exception ex) when(!DEBUG) { bool addToFormLog = true; if (ex is COMException) { Logger.error("Excel вероятнее всего крашанулся, он будет перезапущен для следующего документа в очереди!"); reopenExcel = true; } if (ex is ThreadAbortException || ex.InnerException is ThreadAbortException) { Logger.warn($"Пользователь вышел во время процесса конвертации документа '{filename}'!"); goto skip_error_msgbox; } if (ex is ArgumentNullException) { if (!config.no_form_is_error) { continue; } addToFormLog = false; } if (addToFormLog) { wmain.Log(DataLog.LogImage.ERROR, $"Документ '{filename}' был пропущен из-за ошибки!\n{ex.Message}"); } Logger.error($"Документ {filename} был пропущен из-за ошибки:\n{ex.Message}\n\n{ex.StackTrace}"); skip_error_msgbox: errcount++; deleteDbf = true; } finally { Logger.debug("Закрытие COM Excel и DBF"); dbf?.close(); if (deleteDbf) { dbf?.delete(); } } } totalwatch.Stop(); // Не забываем завершить Excel excel.close(); string msgTotal = $"\nВремени затрачено суммарно: {totalwatch.Elapsed:hh\\:mm\\:ss\\.ff}"; wmain.Log(DataLog.LogImage.INFO, msgTotal); Logger.info(msgTotal); if (errcount > 0) { wmain.Log(DataLog.LogImage.ERROR, config.warning ?? "{0}"); } wmain.toggleConvertButton(true); updateDirectory(); wmain.BeginInvoke((MethodInvoker)wmain.fillElementsData); window.mayClose(); }
public void RepeatClose() { dbf.close(); dbf.close(); }