есть две таблицы эксель от разных дат - если порядок столбов в них и их названия совпадают = 0 иначе 1
В общем предварительно перегоняйте экселя в qvd. В sense я так и не нашёл как адекватно считывать структуру экселя, не включая легаси и не создавая на каждый файл своё подключение в odbcad. А дальше код ниже должен вернуть результат и при добавлении/удалении полей и при смене их последовательности
Table1:
LOAD
recNo() as table1FieldRecNo,
"FieldName" as table1FieldName
FROM [Table1.qvd]
(XmlSimple, table is [QvdTableHeader/Fields/QvdFieldHeader]);
Table2:
LOAD
recNo() as table2FieldRecNo,
"FieldName" as table2FieldName
FROM [Table2.qvd]
(XmlSimple, table is [QvdTableHeader/Fields/QvdFieldHeader])
where not exists(table1FieldName,"FieldName");
drop table Table1;
if NoOfRows('Table2') > 0 then
let isFieldNameChanged = 1;
else
let isFieldNameChanged = 0;
end if;
drop table Table2;
Table:
LOAD
recNo() as table1FieldRecNo,
"FieldName" as FieldName
FROM [Table1.qvd]
(XmlSimple, table is [QvdTableHeader/Fields/QvdFieldHeader]);
join (Table)
LOAD
recNo() as table2FieldRecNo,
"FieldName" as FieldName
FROM [Table2.qvd]
(XmlSimple, table is [QvdTableHeader/Fields/QvdFieldHeader]);
positionFieldName:
Load
FieldName,
if(table1FieldRecNo <> table2FieldRecNo,1,0) as isFieldPositionChanged
Resident Table;
drop table Table;
lastTableCheck:
NoConcatenate
load *
Resident positionFieldName
where isFieldPositionChanged = 1;
if NoOfRows('lastTableCheck') > 0 then
let isFieldPositionChanged = 1;
else
let isFieldPositionChanged = 0;
end if;
drop table lastTableCheck;
if isFieldPositionChanged = 1 or isFieldNameChanged = 1 then
let fileStructureChanged = 1;
else
let fileStructureChanged = 0;
end if;
TRACE $(fileStructureChanged);