forked from ddrilling/AsbCloudServer
Added advanced union logic for files with small amount of empty columns
This commit is contained in:
parent
6c2e58a14d
commit
99c805c7d4
@ -29,6 +29,15 @@ namespace ConsoleApp1
|
|||||||
sheet.Pictures.Delete(n);
|
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*/)
|
static void Main(/*string[] args*/)
|
||||||
{
|
{
|
||||||
var sourceExcelPaths = new List<string>
|
var sourceExcelPaths = new List<string>
|
||||||
@ -36,8 +45,8 @@ namespace ConsoleApp1
|
|||||||
//@"D:\excels\excel1.xlsx",
|
//@"D:\excels\excel1.xlsx",
|
||||||
//@"D:\excels\excel2.xlsx"
|
//@"D:\excels\excel2.xlsx"
|
||||||
//@"D:\excels\e1.xlsx",
|
//@"D:\excels\e1.xlsx",
|
||||||
//@"D:\excels\e2.xlsx",
|
@"D:\excels\e2.xlsx",
|
||||||
//@"D:\excels\e3.xlsx",
|
@"D:\excels\e3.xlsx",
|
||||||
@"D:\excels\e4.XLSX",
|
@"D:\excels\e4.XLSX",
|
||||||
@"D:\excels\e5.XLSX",
|
@"D:\excels\e5.XLSX",
|
||||||
@"D:\excels\e6.XLSX"
|
@"D:\excels\e6.XLSX"
|
||||||
@ -55,12 +64,10 @@ namespace ConsoleApp1
|
|||||||
|
|
||||||
foreach (var sheet in sourceExcelFile.Worksheets)
|
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)
|
sheet.Columns().Count() / sheet.ColumnsUsed().Count() > 5)
|
||||||
{
|
{
|
||||||
Console.WriteLine($"В файле {Path.GetFileName(sourceExcelPath)} " +
|
Console.WriteLine($"В файле {Path.GetFileName(sourceExcelPath)} " +
|
||||||
@ -75,9 +82,7 @@ namespace ConsoleApp1
|
|||||||
if (res != "y")
|
if (res != "y")
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var firstTableCell = sheet.FirstCellUsed();
|
var rngData = GetCellsRange(sheet);
|
||||||
var lastTableCell = sheet.LastCellUsed();
|
|
||||||
var rngData = sheet.Range(firstTableCell.Address, lastTableCell.Address);
|
|
||||||
|
|
||||||
RemovePicturesFromSheet(sheet);
|
RemovePicturesFromSheet(sheet);
|
||||||
|
|
||||||
@ -86,6 +91,22 @@ namespace ConsoleApp1
|
|||||||
|
|
||||||
GC.Collect();
|
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
|
else
|
||||||
{
|
{
|
||||||
RemovePicturesFromSheet(sheet);
|
RemovePicturesFromSheet(sheet);
|
||||||
|
Loading…
Reference in New Issue
Block a user