Import chip virgens tables side by side

This commit is contained in:
Eduardo Lopes 2026-01-28 10:05:44 -03:00
parent b07b1d2cd7
commit f14059dd2c
1 changed files with 58 additions and 28 deletions

View File

@ -1360,20 +1360,34 @@ namespace line_gestao_api.Controllers
for (int i = 0; i < headers.Count; i++)
{
var headerRow = headers[i];
var map = BuildHeaderMap(headerRow);
int colItem = GetCol(map, "ITEM");
if (colItem == 0) continue;
var itemColumns = headerRow.CellsUsed()
.Where(c => NormalizeHeader(c.GetString()) == "ITEM")
.Select(c => c.Address.ColumnNumber)
.OrderBy(c => c)
.ToList();
if (itemColumns.Count == 0) continue;
var startRow = headerRow.RowNumber() + 1;
var endRow = i + 1 < headers.Count ? headers[i + 1].RowNumber() - 1 : lastRow;
for (int tableIndex = 0; tableIndex < itemColumns.Count; tableIndex++)
{
var startCol = itemColumns[tableIndex];
var endCol = tableIndex + 1 < itemColumns.Count
? itemColumns[tableIndex + 1] - 1
: headerRow.LastCellUsed()?.Address.ColumnNumber ?? startCol;
var map = BuildHeaderMapRange(headerRow, startCol, endCol);
int colItem = GetCol(map, "ITEM");
if (colItem == 0) continue;
for (int r = startRow; r <= endRow; r++)
{
var itemStr = GetCellString(ws, r, colItem);
if (string.IsNullOrWhiteSpace(itemStr)) continue;
var numeroChip = NullIfEmptyDigits(GetCellByHeaderAny(ws, r, map,
"Nº DO CHIP", "N° DO CHIP", "NUMERO DO CHIP", "N DO CHIP", "NUM. DO CHIP", "N° DO CHIP"));
"Nº DO CHIP", "N° DO CHIP", "NUMERO DO CHIP", "N DO CHIP", "NUM. DO CHIP"));
var observacoes = GetCellByHeaderAny(ws, r, map, "OBSERVAÇÕES", "OBSERVACOES", "OBS");
if (string.IsNullOrWhiteSpace(numeroChip) && string.IsNullOrWhiteSpace(observacoes))
{
@ -1402,6 +1416,7 @@ namespace line_gestao_api.Controllers
}
}
}
}
if (buffer.Count > 0)
{
@ -1632,6 +1647,21 @@ namespace line_gestao_api.Controllers
return map;
}
private static Dictionary<string, int> BuildHeaderMapRange(IXLRow headerRow, int startCol, int endCol)
{
var map = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
foreach (var cell in headerRow.CellsUsed())
{
var col = cell.Address.ColumnNumber;
if (col < startCol || col > endCol) continue;
var k = NormalizeHeader(cell.GetString());
if (!string.IsNullOrWhiteSpace(k) && !map.ContainsKey(k))
map[k] = col;
}
return map;
}
private static DateTime? ToUtc(DateTime? dt)
{
if (dt == null) return null;