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++) for (int i = 0; i < headers.Count; i++)
{ {
var headerRow = headers[i]; var headerRow = headers[i];
var map = BuildHeaderMap(headerRow); var itemColumns = headerRow.CellsUsed()
int colItem = GetCol(map, "ITEM"); .Where(c => NormalizeHeader(c.GetString()) == "ITEM")
if (colItem == 0) continue; .Select(c => c.Address.ColumnNumber)
.OrderBy(c => c)
.ToList();
if (itemColumns.Count == 0) continue;
var startRow = headerRow.RowNumber() + 1; var startRow = headerRow.RowNumber() + 1;
var endRow = i + 1 < headers.Count ? headers[i + 1].RowNumber() - 1 : lastRow; 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++) for (int r = startRow; r <= endRow; r++)
{ {
var itemStr = GetCellString(ws, r, colItem); var itemStr = GetCellString(ws, r, colItem);
if (string.IsNullOrWhiteSpace(itemStr)) continue; if (string.IsNullOrWhiteSpace(itemStr)) continue;
var numeroChip = NullIfEmptyDigits(GetCellByHeaderAny(ws, r, map, 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"); var observacoes = GetCellByHeaderAny(ws, r, map, "OBSERVAÇÕES", "OBSERVACOES", "OBS");
if (string.IsNullOrWhiteSpace(numeroChip) && string.IsNullOrWhiteSpace(observacoes)) if (string.IsNullOrWhiteSpace(numeroChip) && string.IsNullOrWhiteSpace(observacoes))
{ {
@ -1402,6 +1416,7 @@ namespace line_gestao_api.Controllers
} }
} }
} }
}
if (buffer.Count > 0) if (buffer.Count > 0)
{ {
@ -1632,6 +1647,21 @@ namespace line_gestao_api.Controllers
return map; 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) private static DateTime? ToUtc(DateTime? dt)
{ {
if (dt == null) return null; if (dt == null) return null;