Как автоматически отрегулировать ширину всех столбцов листа Excel с помощью excel4node? - PullRequest
0 голосов
/ 25 сентября 2019

Я создал Excel файл с помощью excel4node:

...
var express = require('express');
var router = express.Router();
var xl = require('excel4node');
...
router.post("/sendMailReporting", function(req, res) {
    var wb = new xl.Workbook();
    var sheet1 = wb.addWorksheet('Résumé');

    var titleStyle = wb.createStyle({
        font: {
            bold: true,
            size: 24
        }
    });
    var subTitleStyle = wb.createStyle({
        font: {
            bold: true,
            size: 10
        },
        fill: {
            type: 'pattern',
            patternType: 'solid',
            fgColor: 'e9e9e9'
        }
    });
    var enteteStyle = wb.createStyle({
        font: {
            bold: true,
            size: 11
        },
        fill: {
            type: 'pattern',
            patternType: 'solid',
            fgColor: 'e9e9e9'
        }
    });

    // titre
    sheet1.cell(1, 1).string("Reporting quotidien George").style(titleStyle);

    // sous-titres
    sheet1.cell(3, 1).string("Flotte").style(subTitleStyle);
    sheet1.cell(4, 1).string("Début").style(subTitleStyle);
    sheet1.cell(5, 1).string("Fin").style(subTitleStyle);
    sheet1.cell(6, 1).string("Génération").style(subTitleStyle);

    // données sous-titre
    sheet1.cell(3, 2).string(req.body.flotte_lib);
    var dateDeb = moment(), dateFin = moment(), zao = moment();
    if (req.body.donnee.indexOf("/") == -1) {
        dateDeb = moment().subtract(1, 'days');
    } else {
        dateDeb = moment(req.body.donnee, "DD-MM-YYYY");
    }
    sheet1.cell(4, 2).string(dateDeb.format("dddd DD MMMM YYYY").concat(" à 00:00"));
    sheet1.cell(5, 2).string(dateFin.format("dddd DD MMMM YYYY").concat(" à 00:00"));
    sheet1.cell(6, 2).string(zao.format("dddd DD MMMM YYYY").concat(" à ").concat(zao.format("HH:mm")));

    // entêtes
    sheet1.cell(8, 1).string("Véhicule").style(enteteStyle);
    sheet1.cell(8, 2).string("Immatriculation").style(enteteStyle);
    sheet1.cell(8, 3).string("Conducteur").style(enteteStyle);
    sheet1.cell(8, 4).string("Date de début").style(enteteStyle);
    sheet1.cell(8, 5).string("Date de fin").style(enteteStyle);
    sheet1.cell(8, 6).string("Temps dans la zone").style(enteteStyle);
    sheet1.cell(8, 7).string("Temps hors zone").style(enteteStyle);
    sheet1.cell(8, 8).string("hors zone \n sortie zone / retour zone").style(enteteStyle);
    sheet1.cell(8, 9).string("Durée de roulage").style(enteteStyle);
    sheet1.cell(8, 10).string("Distance parcourue").style(enteteStyle);
    sheet1.cell(8, 11).string("Vitesse moyenne").style(enteteStyle);
    sheet1.cell(8, 12).string("Vitesse maximale").style(enteteStyle);
    sheet1.cell(8, 13).string("Durée des arrêts").style(enteteStyle);
    sheet1.cell(8, 14).string("Nombre d'arrêts").style(enteteStyle);

    // données
    var critereHierDeb = (dateDeb.format("YYYY-MM-DD")).concat("T00:00:00"), critereHierFin = (dateDeb.format("YYYY-MM-DD")).concat("T23:59:59");
    if (req.body.donnee.indexOf("/") == -1) { // choix sur véhicule
        async.parallel({
            vehicule: function(cb_vehicule) {
                connexion.query("select vehicule_nom, immatriculation from "+utils.getPrefixNomTables()+"vehicule where numero_tag_ip = ?", [req.body.donnee], (err, rows) => {
                    if (err) {
                        throw err;
                    }
                    cb_vehicule(null, rows[0]);
                });
            },
            conducteur: function(cb_conducteur) {
                connexion.query("select c.msisdn from "+utils.getPrefixNomTables()+"vehicule v join "+utils.getPrefixNomTables()+"conducteur c on v.conducteur_id = c.conducteur_id where v.numero_tag_ip = ?", [req.body.donnee], (err, rows) => {
                    if (err) {
                        throw err;
                    }
                    if (rows.length > 0 && rows[0].msisdn != null) {
                        var soap = require('strong-soap').soap;
                        var url = "https://www.telma.net/sentinel/mvola/wsdl.php?module=jWSDL&action=WSDL:wsdl&service=mvola~WSMVolaGetInfosKYC";
                        var num = (rows[0]).msisdn;
                        var ret = {};
                        var requestArgs =   {
                                                module:'jWSDL',
                                                action:'WSDL:wsdl',
                                                service:'mvola~WSMVolaGetInfosKYC',
                                                zSubscriberId:""+num
                                            };
                        var options = {};
                        soap.createClient(url, options, function(err, client) {
                            if (client != undefined) {
                                var method = client['WSMVolaGetInfosKYCCtrl']['WSMVolaGetInfosKYCCtrlPort']['getInfosKYC'];
                                method(requestArgs, function(err, result, envelope, soapHeader) {
                                    var jsonRoot = result.getInfosKYCReturn;
                                    var jsonStatusCode = jsonRoot.status_Code;
                                    var statusCode = jsonStatusCode["$value"];
                                    if (statusCode == "000") {
                                        var jsonData = jsonRoot.oDataKYC;
                                        var jsonLast_name = jsonData.Last_name;
                                        var jsonFirst_name = jsonData.First_name;
                                        var Last_name = jsonLast_name['$value'] , First_name = jsonFirst_name['$value'];
                                        cb_conducteur(null, Last_name+" "+First_name);
                                    } else cb_conducteur(null, "");
                                });
                            }
                            else cb_conducteur(null, "");
                        });
                    } else {
                        cb_conducteur(null, "");
                    }
                });
            },
            "dateDebut": function(cb_dateDebut) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/dateDebut/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            var dateDebut = dataJSON.Date_debut;
                            var momentDateDebut = (dateDebut == "" ? null : moment(dateDebut, "DD-MM-YYYY, H:m:ss"));
                            if (dateDebut == "")
                                cb_dateDebut(null, "");
                            else
                                cb_dateDebut(null, momentDateDebut.format("DD/MM/YYYY HH:mm"));
                });
            },
            "dateFin": function(cb_dateFin) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/dateFin/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            var dateFin = dataJSON.Date_fin;
                            var momentDateFin = (dateFin == "" ? null : moment(dateFin, "DD-MM-YYYY, H:m:ss"));
                            if (dateFin == "")
                                cb_dateFin(null, "");
                            else
                                cb_dateFin(null, momentDateFin.format("DD/MM/YYYY HH:mm"));
                });
            },
            "dureeRoulage": function(cb_duree_roulage) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/dureeRoulage/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            var Duree_roulage = dataJSON.Duree_roulage;
                            if (Duree_roulage == "00")
                                cb_duree_roulage(null, "");
                            else {
                                moment_Duree_roulage = moment(Duree_roulage, "H:m:s");
                                cb_duree_roulage(null, moment_Duree_roulage.format("H[h] mm[m] ss[s]"));
                            }
                });
            },
            "distanceParcourue": function(cb_distance_parcourue) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/parcours/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            var Distance_parcours = dataJSON.Distance_parcours;
                            Distance_parcours = utils.truncateDecimal(Distance_parcours/1000, 1);
                            cb_distance_parcourue(null, (Distance_parcours.toString()).concat(" km"));
                });
            },
            "vitesseMoyenne": function(cb_vitesse_moyenne) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/vitesseMoyen/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            cb_vitesse_moyenne(null, ((dataJSON.Vitesse_moyen).toString()).concat(" km/h"));
                });
            },
            "vitesseMax": function(cb_vitesse_max) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/vitesseMax/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            cb_vitesse_max(null, ((dataJSON.Vitesse_max).toString()).concat(" km/h"));
                });
            },
            "dureeArret": function(cb_duree_arret) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/dureeArret/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            var dureeArret = dataJSON.Duree_arret;
                            if (dureeArret == "00")
                                cb_duree_roulage(null, "");
                            else {
                                moment_Duree_arret = moment(dureeArret, "H:m:s");
                                cb_duree_arret(null, moment_Duree_arret.format("H[h] mm[m] ss[s]"));
                            }
                });
            },
            "nbArret": function(cb_nb_arret) {
                request({
                            url: "https://alfred.telma.net/track_/trackable/nombreArret/".concat(req.body.donnee).concat("?start=").concat(critereHierDeb).concat("&end=").concat(critereHierFin)
                        }, function (error, response, body) {
                            var data = JSON.parse(body);
                            var dataJSON = data[0];
                            cb_nb_arret(null, dataJSON.Nombre_arret);
                });
            }
        }, function(err, results) {
            var vehicule = results.vehicule;
            sheet1.cell(9, 1).string(vehicule.vehicule_nom);
            sheet1.cell(9, 2).string(vehicule.immatriculation);
            sheet1.cell(9, 3).string(results.conducteur);
            sheet1.cell(9, 4).string(results.dateDebut);
            sheet1.cell(9, 5).string(results.dateFin);
            sheet1.cell(9, 9).string(results.dureeRoulage);
            sheet1.cell(9, 10).string(results.distanceParcourue);
            sheet1.cell(9, 11).string(results.vitesseMoyenne);
            sheet1.cell(9, 12).string(results.vitesseMax);
            sheet1.cell(9, 13).string(results.dureeArret);
            sheet1.cell(9, 14).number(results.nbArret);

            // nom du fichier
            var tps = moment().format('YYYYMMDHHmmss')+moment().milliseconds();
            var nom_fichier = "reporting"+tps+".xlsx";

            // création du fichier
            wb.write(path.join(__dirname, '../public/pjreporting/'+nom_fichier));

            res.send("");
        });
    }
});

Во время выполнения столбцы автоматически не настраиваются на максимальную ширину содержимого:

enter image description here

Так как программно отрегулировать ширину всех столбцов до их максимальной длины содержимого?

...