diff --git a/ConsoleApp1/Program.cs b/ConsoleApp1/Program.cs index 04877954..03daec69 100644 --- a/ConsoleApp1/Program.cs +++ b/ConsoleApp1/Program.cs @@ -29,6 +29,15 @@ namespace ConsoleApp1 sheet.Pictures.Delete(n); } + private static IXLRange GetCellsRange(IXLWorksheet sheet) + { + var firstTableCell = sheet.FirstCellUsed(); + var lastTableCell = sheet.LastCellUsed(); + var rngData = sheet.Range(firstTableCell.Address, lastTableCell.Address); + + return rngData; + } + static void Main(/*string[] args*/) { var sourceExcelPaths = new List @@ -36,8 +45,8 @@ namespace ConsoleApp1 //@"D:\excels\excel1.xlsx", //@"D:\excels\excel2.xlsx" //@"D:\excels\e1.xlsx", - //@"D:\excels\e2.xlsx", - //@"D:\excels\e3.xlsx", + @"D:\excels\e2.xlsx", + @"D:\excels\e3.xlsx", @"D:\excels\e4.XLSX", @"D:\excels\e5.XLSX", @"D:\excels\e6.XLSX" @@ -55,12 +64,10 @@ namespace ConsoleApp1 foreach (var sheet in sourceExcelFile.Worksheets) { - //var columnsToDelete = sheet.Columns().Skip(sheet.ColumnsUsed().Count()); - - //foreach (var d in columnsToDelete) - // d.Delete(); - - if (sheet.Columns().Count() > maxAllowedColumns && + // Если в файле очень много колонок и многие из них пустые - + // предлагаем удалить их вручную или пытаемся копировать + // ячейки попорядку (не красиво). Красиво не получится. + if (sheet.Columns().Count() > maxAllowedColumns && sheet.Columns().Count() / sheet.ColumnsUsed().Count() > 5) { Console.WriteLine($"В файле {Path.GetFileName(sourceExcelPath)} " + @@ -75,9 +82,7 @@ namespace ConsoleApp1 if (res != "y") return; - var firstTableCell = sheet.FirstCellUsed(); - var lastTableCell = sheet.LastCellUsed(); - var rngData = sheet.Range(firstTableCell.Address, lastTableCell.Address); + var rngData = GetCellsRange(sheet); RemovePicturesFromSheet(sheet); @@ -86,6 +91,22 @@ namespace ConsoleApp1 GC.Collect(); } + // Если колонок в файле немного, но среди них также есть пустые - + // проще удалить ненужные колонки и скопировать лист красиво. + else if (sheet.Columns().Count() < maxAllowedColumns && + sheet.Columns().Count() / sheet.ColumnsUsed().Count() > 2) + { + RemovePicturesFromSheet(sheet); + + var columnsToDelete = sheet.Columns().Skip(sheet.ColumnsUsed().Count()); + + foreach (var d in columnsToDelete) + d.Delete(); + + sheet.CopyTo(resultExcelFile, sheet.Name); + GC.Collect(); + } + // Если по колонкам все хорошо, копируем лист красиво. else { RemovePicturesFromSheet(sheet);