diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index ef014e22..5f95a59a 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -17,7 +17,8 @@ namespace ConsoleApp1 class Program { - private static IXLWorksheet CopyImagesToAnotherSheet(IXLWorksheet sourceSheet, IXLWorksheet resultSheet) + private static IXLWorksheet CopyImagesToAnotherSheet(IXLWorksheet sourceSheet, + IXLWorksheet resultSheet) { foreach (var picture in sourceSheet.Pictures) { @@ -33,12 +34,7 @@ namespace ConsoleApp1 private static void RemovePicturesFromSheet(IXLWorksheet sheet) { - var picsNames = new List(); - - foreach (var p in sheet.Pictures) - picsNames.Add(p.Name); - - var filteredPics = picsNames.Distinct(); + var filteredPics = sheet.Pictures.Select(p => p.Name).Distinct().ToList(); foreach (var n in filteredPics) sheet.Pictures.Delete(n); @@ -57,9 +53,11 @@ namespace ConsoleApp1 // Для этого сначала все изображения переносятся на временный лист "PicsCopy", // затем удаляются из копируемого листа, копируемый лист копируется в лист-результат // и после этого из temp листа "PicsCopy" в лист-результат также копируются изображения. + // Temp лист удаляется. private static void CopySheetToFile(IXLWorksheet currentSheet, XLWorkbook resultExcelFile) { var picturesCopySheet = resultExcelFile.AddWorksheet("PicsCopy"); + var copy = currentSheet.Pictures.Select(p => new { buff = p.ImageStream, }); CopyImagesToAnotherSheet(currentSheet, picturesCopySheet); @@ -78,7 +76,7 @@ namespace ConsoleApp1 { //@"D:\excels\excel1.xlsx", //@"D:\excels\excel2.xlsx" - @"D:\excels\e1.xlsx", + //@"D:\excels\e1.xlsx", @"D:\excels\e2.xlsx", @"D:\excels\e3.xlsx", @"D:\excels\e4.XLSX", @@ -88,42 +86,28 @@ namespace ConsoleApp1 const string resultExcelPath = @"D:\excels\result.xlsx"; - using var resultExcelFile = new XLWorkbook(); + using var resultExcelFile = new XLWorkbook(XLEventTracking.Disabled); const int maxAllowedColumns = 256; foreach(var sourceExcelPath in sourceExcelPaths) { - using var sourceExcelFile = new XLWorkbook(sourceExcelPath); + using var sourceExcelFile = new XLWorkbook(sourceExcelPath, XLEventTracking.Disabled); Console.WriteLine($"Добавляется файл {Path.GetFileName(sourceExcelPath)}"); + foreach (var sheet in sourceExcelFile.Worksheets) { - // Если в файле очень много колонок и многие из них пустые - - // предлагаем удалить их вручную или пытаемся копировать - // ячейки попорядку (не красиво). Красиво не получится. - if (sheet.Columns().Count() > maxAllowedColumns && - sheet.Columns().Count() / sheet.ColumnsUsed().Count() > 3) + if (sheet.Columns().Count() > maxAllowedColumns) { - Console.WriteLine($"В файле {Path.GetFileName(sourceExcelPath)} " + - $"{sheet.Columns().Count() - sheet.ColumnsUsed().Count()} пустых колонок " + - $"без записей.\nЕсли продолжить выполнение, форматирование выходного " + - $"листа может быть нарушено.\nДля сохранения структуры документа " + - $"рекомендуется прервать выполнение и удалить неиспользуемые колонки.\n" + - $"Продолжить выполнение? (y/n)"); - - var res = Console.ReadLine(); - - if (res != "y") - return; - var resultSheet = resultExcelFile.Worksheets.Add(sheet.Name); var rngData = GetCellsRange(sheet); rngData.CopyTo(resultSheet.Cell(1, 1)); - var lastRowWithData = rngData.LastRowUsed().RangeAddress.LastAddress.RowNumber; + var lastRowWithData = rngData.LastRowUsed().RangeAddress + .LastAddress.RowNumber; for (int i = 1; i < lastRowWithData; i++) { @@ -132,35 +116,13 @@ namespace ConsoleApp1 } CopyImagesToAnotherSheet(sheet, resultSheet); - - GC.Collect(); } - // Если колонок в файле немного, но среди них также есть пустые - - // проще удалить ненужные колонки и скопировать лист красиво. - else if (sheet.Columns().Count() < maxAllowedColumns && - sheet.Columns().Count() / sheet.ColumnsUsed().Count() > 2) - { - var columnsToDelete = sheet.Columns() - .Skip(sheet.ColumnsUsed().Count()); - - foreach (var d in columnsToDelete) - d.Delete(); - - CopySheetToFile(sheet, resultExcelFile); - - GC.Collect(); - } - // Если по колонкам все хорошо, копируем лист красиво. else - { CopySheetToFile(sheet, resultExcelFile); - - GC.Collect(); - } } } - resultExcelFile.SaveAs(resultExcelPath); + resultExcelFile.SaveAs(resultExcelPath, true, true); Console.WriteLine("Done. Press any key to quit."); Console.ReadKey();