No.
L'excel fonte mi spara una riga per ogni record, con ordine dei dati abbastanza casuale anche se regolare record per record.
Le tabelle di destinazione sono diverse.
Ho risolto concettualmente così:
1) Ho titolato sulla prima riga a mano l'excel confrontando l'ordine dei dati con il file Works (dolore)
2) Ho raccolto la prima riga di titolazione e fatto combine_array con ciascuna riga di dati per ottenere l'array Anagrafica(titolo => valore)
3) Sulla base di questo array, ho creato altri array manualmente con all'interno i valori di ogni insert presenti nella riga originaria e disordinata dei dati e confrontato Anagrafica singolarmente questi array con la funzione in_array. Questo per suddividere la riga in vari gruppi d'inserimento dati.
4) A questo punto ho i dati disordinati ma divisi per tabelle. Sempre manualmente, ho creato in vari array l'ordine dei dati sulle tabelle del db e fatto il confronto fra l'array disordinato e il corrispondente ordinato per ottenere finalmente l'ultimo array con dentro i dati ordinati nel modo specifico.
A questo punto chiudo con un ciclo foreach che mi crea la query con i valori dell'array finale Ordered.
Tutte queste operazioni all'interno di un ciclo while che ripete le operazioni per ogni riga.
Meccanismo complesso, forse non elegantissimo, ma fa esattamente quello che mi serve.
P.S ho dimenticato di sottolineare che per legare con l'id le varie tabelle, dopo l'inserimento anagrafico vado a ricavarmi il valore dell'ultimo inserimento (quello appena fatto quindi) con la query max(id), e appendo questo valore all'interno di ogni array laddove necessario.