Ciao a tutti,

sono nuovo sul forum. Ho un problema che mi assilla da giorni e che non riesco a venirne a capo in nessun modo.
Ho uno script dove carico un file excel e me lo apre tranquillamente. Tutto questo avviene lato client ovviamente. L'excel viene letto e messo in una tabella html con tutte le sue belle colonnine.
Fino a qui tutto bene, tutto funziona.
L'azione successiva, è quella di esportare i dati dalla tabella con diverse opzioni di scelta, dal prelevare la singola colonna, oppure di omettere delle colonne, fino all'opzione di concatenare i valori di più colonne in una stringa unica. Oltre al fatto di esportare il contenuto in base ad uno o più valori di una colonna, come se fosse un filtro applicato ad una colonna in excel.
Tutto questo output di scelta lo voglio memorizzare nella clipboard di sistema.

Con un excel di circa 200 righe non risulta mai esserci problemi. Il contenuto viene memorizzato nella clipboard e io riesco tranquillamente a incollare il contenuto altrove.
Il problema nasce quando le righe sono molte di più.
Il comportamento dello script cambia fin da subito. Ad esempio, quando lancio l'azione, ho queste due linee
codice:
$('#cover').show();
createprocessbar('')
che sono due semplici comandi, uno che riabilita la visibilità di un div a tutto schermo semi-invisibile e l'altro che crea al centro dello schermo uno spinner.
Quando ho pochi dati, queste azioni partono immediatamente alla pressione del pulsante di avvio, mentre quando sono molti, questi due processi non vengono eseguiti subito ma molto dopo. E con il risultato che la clipboard non viene memorizzata ma mantiene il contenuto precedente.
Qui uno spaccato del codice
codice:
$('#CheckIntegrity').find('button').off('click').on('click',function(){
    $('#cover').show();
    createprocessbar('')
        
//qui ho delle iterazioni che controllano se alcune checkbox sono spuntate

// se l'integrità delle scelte va bene, allora continua con la funzione sotto
    
    proceed()        
    
    })
e qui sotto il vero codice (molto semplificato, in realtà le opzioni di output sono molteplici, ma giusto per intenderci
codice:
function proceed(){


    $('body').append('<textarea style="position:absolute;top:200px;left:600;z-index:2000" id="MOMF"></textarea>');
    var field = $('#MOMF')
var objtable = $('#exceltable');
var rows = $('table tr').length;
for(sendto=0;sendto<rows;sendto++){
colonna1 = colonna2 = colonna3 = ""

            var actualrow = objtable.find('tr.addtocreate').eq(sendto)
            
            if(excol1 == 1){
            colonna1 = actualrow.children().eq(KvarExcel.col1).text()

            if(colonna1 == ""){//se vuota
                 colonna1 = "[NO VALUE]"
            }}

            if(excol2 == 1){
             colonna2 = actualrow.children().eq(KvarExcel.col2).text()
            
            if(colonna2  == ""){//se vuota
                 colonna2  = "[NO VALUE]"
            }}

            if(excol3 == 1){
             colonna3 = actualrow.children().eq(KvarExcel.filename).text()

            if(colonna3 == ""){//se vuota
                 colonna3 = "[NO VALUE]"
            }}

             //qui lo inserisce nella text area
            field.append(colonna1 + "_" + colonna2+ "|!|" + colonna3+ "\n");
        }
//a questo punto, copio la clipboard

field.select()                                     
document.execCommand("Copy");
Come scrivevo, con excel piccoli, tutto procede bene, appena le righe si fanno molte, il comportamento è tutto differente e non funziona.
Da quanto mi sembra di capire, Javascript non aspetta di finire la prima azione (quella della creazione dello spinner), ma continua immediatamente chiamando l'altra azione, la interagisce tutta e poi sembra (quasi) tornare indietro nelle operazioni che ha saltato. Come a dire che Javascript interessi prima farsi tutto il calcolo e poi procede con le altre azioni.
Con il risultato che la textarea non è ancora stata processato e il "copia" avviene sul nulla.
Possibile?
C'è un qualche modo di dire a Javascript "Ehi, aspetta, finisci prima questo e poi procedi"?

Scusate lo spiegone, spero di essere stato chiaro.