Создание 3 рабочих листов в одной рабочей книге (Excel-JS) - PullRequest
1 голос
/ 01 июля 2019

Мне нужно создать один файл Excel с 3 листами.Сейчас я написал функцию, которая создает рабочий лист и рабочую книгу.У меня проблема, потому что мне нужно записать данные в рабочую среду в какой-то выполняемой асинхронной функции.Может быть, какой-то код опишет, что я должен делать.

var Excel = require('exceljs');
const workbook = new Excel.Workbook({
    useStyles: true
})

const headers = [
    { header: 'Plik', key: 'path', width: 40 },
    { header: 'Zwierze', key: 'name', width: 12 },
    { header: 'Prawdopodobienstwo(%)', key: 'confidence', width: 24 },
    { header: 'Czas odpowiedzi(s)', key: 'responseTime', width: 20 }
];
workbook.xlsx.writeFile("./excel/Wyniki.xlsx");

setWorkSheet = (name, responses, filename) => {
    workbook.xlsx.readFile(filename)
        .then(function () {
            const worksheet = workbook.addWorksheet(name);
            worksheet.columns = headers;
            for (let i = 0; i < responses.length; i++) {
                worksheet.addRow(responses[i]);
            }
            worksheet.getRow(1).style.font = { size: 12, name: 'Bahnschrift SemiBold SemiConden' }
            worksheet.getRow(1).eachCell((cell) => {
                cell.fill = {
                    type: 'pattern',
                    pattern: 'solid',
                    fgColor: { argb: '993399' }
                },
                    cell.style.font = {
                        color: {
                            argb: 'ffffff'
                        },
                        size: 14,
                    }
            })
            worksheet.eachRow((Row, rowNumber) => {
                Row.alignment = {
                    horizontal: 'center',
                }
                Row.eachCell((Cell, cellNumber) => {
                    Cell.alignment = {
                        vertical: 'middle',
                        horizontal: 'center'
                    },
                        Cell.border = {
                            top: { style: 'double', color: { argb: 'black' } },
                            left: { style: 'double', color: { argb: 'black' } },
                            bottom: { style: 'double', color: { argb: 'black' } },
                            right: { style: 'double', color: { argb: 'black' } }
                        }
                })
            })
            worksheet.views = [
                { state: 'frozen', xSplit: 1, ySplit: 1, activeCell: 'B2' },
            ];
            return workbook.xlsx.writeFile(`${filename}`)
        })
        .then(function () {
            console.log("Done");
        })
        .catch(function (err) {
            console.log(err)
        });

}

И эта функция сейчас создает новый файл со специальным именем рабочего листа.Мне нужно выполнить эту функцию 3 раза, и после этой операции мне нужно иметь один файл и 3 рабочих листа.Вот места, где я выполнил эту функцию:

async function Cognitive() {
    let tab = [];
    for (let i = 0; i < arrayOfFiles.length; i++) {
        let x = await cognitive.cognitiveDetectLabels(arrayOfFiles[i]);
        tab.push(x)
    }

    setWorkSheet('Cognitive', tab, "./excel/Wyniki.xlsx");
  
}
exports.Cognitive = Cognitive;

async function Rekognition() {
    let tab = [];
    const path = "./csv/Rekognition.csv";

    for (let i = 0; i < arrayOfFiles.length; i++) {
        let x = await rekognitionFile.callaws(arrayOfFiles[i]);
        tab.push(x)
    }
    setWorkSheet("Rekognition", tab, "./excel/Wyniki.xlsx");

}
exports.Rekognition = Rekognition;

async function Vision() {
    let tab = [];
    for (let i = 0; i < arrayOfFiles.length; i++) {
        let x = await vision.callVision(arrayOfFiles[i]);
        tab.push(x)
    }
   
    setWorkSheet("Vision", tab, "./excel/Wyniki.xlsx");
}
exports.Vision = Vision;

Когда я выполняю одну из этих асинхронных функций.Файл с рабочим листом всегда перезаписывается.Однако мне нужно добавить листы в один файл (3 листа).У кого-нибудь есть идеи по этой проблеме?Спасибо

...