Я не могу прочитать несколько строк из файла xlsx - PullRequest
0 голосов
/ 23 октября 2019

Я пытаюсь прочитать несколько строк из файла xlsx. Мой лист xlsx содержит различные детали, одна из которых - каталог FTP, подробности пароля. Каждая строка содержит отдельный каталог FTP. Я могу читать, извлекать и извлекать данные с FTP, если на листе упоминается только одна строка, но как только я добавляю дополнительную строку для чтения, она начинает показывать ошибку обещания, Ниже мой код dataJson1 - это лист Excel (JSON)

for (let i = 0; i < dataJson1.length; i++) {

        dir = dataJson1[i]['FTP DIR'];
        subfolder = dataJson1[i]['Sub Folder'];
        ftpPath = dir + subfolder;
        host = dataJson1[i]['FTP IP'];
        user = dataJson1[i]['FTP Username'];
        password = dataJson1[i]['FTP Password'];
        ticketStatus = dataJson1[i]['Status']
        console.log("FTP LOCATION:" + ftpPath + "\n" + "HOSTNAME:" + host + "\n" + "USERNAME:" + user + "\n" + "PASSWORD:" + password + "\n")
        //Reading the list of directories present in the FTP location
        console.log("value of i" + i);
        ///////////
        if (ticketStatus == true) {
            if (!ftp) {
                ftp = new PromiseFtp();
            }
            const ftpPromise = ftp.connect({
                host: host, user: user,
                password: password
            }).then(function (serverMessage) {
                console.log('Server message: ' + serverMessage)
                //console.log("value of i" + i)

                return ftp.list(ftpPath);

            }).then(function (list) {
                console.log('Directory listing:');

                var dirList = (list)
                console.log(dirList)

                console.log("Number of directories:" + dirList.length)


                var jsondirString = JSON.stringify(dirList)
                var datadirJson1 = JSON.parse(jsondirString)
                for (var j = 0; j < dirList.length; j++) {

                    //console.log(datadirJson1[j]['name'])
                    ticketName.push(datadirJson1[j]['name'])
                    //console.log(ftpTime)
                    ftpTime.push(datadirJson1[j]['date'])
                }
                return ftp.end();
            });
            promises.push(ftpPromise)
        }//status check ends

    }//Loop ends here


  Promise.all(promises).then(arrayOfResults => {

        console.log(ticketName);
        var ticketNameArr = [];


        for (let i = 0; i < ticketName.length; i++) {
            let ticketNameIs = ticketName[i];
            let ftpTimeIs = ftpTime[i]
            let ticketDetail = ticketApp(ticketNameIs, ftpTimeIs);
            Promise.all(ticketDetail).then(function (values) {
                //console.log(values);
                ticketNameArr.push({
                    // FtpTime: values[0].ftpTime,
                    Date: values[0].ftpTime,
                    TicketName: ticketNameIs,
                    //Add Dynamic folder column----
                    In_Input_Location: values[0].ticketStatusInput,
                    Input_Time: values[0].mtime,
                    In_Result_Location: values[1].ticketStatusResult,
                    Result_Time: values[1].mtime,
                    //Will help in preparing comments
                    CallAPi: values[3].apiStatus,
                    ReportStatus: values[3].reportStatus,
                    Comment: values[4].Comment,
                    Status: values[5].ticketStatus
                    // LogStatus: values[2].logStatus,
                    // LogCreateTime: values[2].birthtime,
                    // LogModifiedTime: values[2].mtime,


                });


                if (ticketNameArr.length == ticketName.length) {


                    //uncomment below command if sheet is blank then comment back
                    // ws = XLSX.utils.sheet_add_json(ws, ticketNameArr,{origin:0, skipHeader:false});
                    //comment below command if sheet is blank then uncomment

                    ws = XLSX.utils.sheet_add_json(ws, ticketNameArr, { origin: -1, skipHeader: true });

                    //                  
                    let wsRemDup = removeDuplicate(ws)

                    console.log("Unique Data", wsRemDup)
                    //OverWriting Unique data

                    wb.Sheets[first_sheet_name] = XLSX.utils.json_to_sheet(wsRemDup);
                    XLSX.writeFile(wb, 'DailyTicketSatus.xlsx')





                    // respond.render('result', { "ticketNameArr": ticketNameArr });
                    respond.render('index', { "ticketNameArr": ticketNameArr });




                }


            });

        }


    })



})```

1 Ответ

0 голосов
/ 23 октября 2019

Я бы предложил использовать для этой задачи синтаксис async / await, его легче прочитать, и вы можете убедиться, что вызов ftp.end () завершен, прежде чем переходить к следующему хосту ftp. Это, вероятно, причина, по которой исходный код не может обработать более одной строки.

async function runFTPJob(dataJson1) {

    let promises = [];
    for (let i = 0; i < dataJson1.length; i++) {

        dir = dataJson1[i]['FTP DIR'];
        subfolder = dataJson1[i]['Sub Folder'];
        ftpPath = dir + subfolder;
        host = dataJson1[i]['FTP IP'];
        user = dataJson1[i]['FTP Username'];
        password = dataJson1[i]['FTP Password'];
        ticketStatus = dataJson1[i]['Status']
        console.log("Getting row:", i);
        console.log("FTP LOCATION:" + ftpPath + "\n" + "HOSTNAME:" + host + "\n" + "USERNAME:" + user + "\n" + "PASSWORD:" + password + "\n")
        //Reading the list of directories present in the FTP location

        if (ticketStatus == true) {
            if (!ftp) {
                ftp = new PromiseFtp();
            }

            try { 
                let ftpPromise = ftp.connect({ host, user, password });
                promises.push(ftpPromise);
                let serverMessage = await ftpPromise;
                console.log('Server message: ' + serverMessage)
                let dirList = await ftp.list(ftpPath);
                console.log('Directory listing:', dirList);
                console.log("Number of directories:" + dirList.length)
                for (let dirEntry of dirList) {
                    ticketName.push(dirEntry.name);
                    ftpTime.push(dirEntry.date);
                }
                await ftp.end();
            } catch (e) {
                console.error("An error occurred accessing ftp site:", e.message);
            }
        }//status check ends
    }//Loop ends here``

    return promises;
}


function processTickets() {

    console.log(ticketName);
    var ticketNameArr = [];

    for (let i = 0; i < ticketName.length; i++) {
        let ticketNameIs = ticketName[i];
        let ftpTimeIs = ftpTime[i]
        let ticketDetail = ticketApp(ticketNameIs, ftpTimeIs);
        Promise.all(ticketDetail).then(function (values) {
            //console.log(values);
            ticketNameArr.push({
                // FtpTime: values[0].ftpTime,
                Date: values[0].ftpTime,
                TicketName: ticketNameIs,
                //Add Dynamic folder column----
                In_Input_Location: values[0].ticketStatusInput,
                Input_Time: values[0].mtime,
                In_Result_Location: values[1].ticketStatusResult,
                Result_Time: values[1].mtime,
                //Will help in preparing comments
                CallAPi: values[3].apiStatus,
                ReportStatus: values[3].reportStatus,
                Comment: values[4].Comment,
                Status: values[5].ticketStatus
                // LogStatus: values[2].logStatus,
                // LogCreateTime: values[2].birthtime,
                // LogModifiedTime: values[2].mtime,


            });


            if (ticketNameArr.length == ticketName.length) {


                //uncomment below command if sheet is blank then comment back
                // ws = XLSX.utils.sheet_add_json(ws, ticketNameArr,{origin:0, skipHeader:false});
                //comment below command if sheet is blank then uncomment

                ws = XLSX.utils.sheet_add_json(ws, ticketNameArr, { origin: -1, skipHeader: true });

                //                  
                let wsRemDup = removeDuplicate(ws)

                console.log("Unique Data", wsRemDup)
                //OverWriting Unique data

                wb.Sheets[first_sheet_name] = XLSX.utils.json_to_sheet(wsRemDup);
                XLSX.writeFile(wb, 'DailyTicketSatus.xlsx')

                // respond.render('result', { "ticketNameArr": ticketNameArr });
                respond.render('index', { "ticketNameArr": ticketNameArr });

            }
        });
    }
}

( async() => {
    await runFTPJob(dataJson1);
    processTickets();
})();
...