Added advanced union logic for files with small amount of empty columns

This commit is contained in:
KharchenkoVV 2021-09-17 15:58:01 +05:00
parent 6c2e58a14d
commit 99c805c7d4

View File

@ -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<string>
@ -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);