首页 > 解决方案 > 在一个工作簿中创建 3 个工作表(Excel-JS)问题

问题描述

我需要创建一个包含 3 个工作表的 excel 文件。现在我写了一个创建工作表和工作簿的函数。我有问题,因为我需要在一些执行的异步函数中将数据写入工作表。也许一些代码会描述我必须做什么。

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 张)。有人对这个问题有一些想法吗?谢谢

标签: javascriptnode.jsexcelasync-awaitexceljs

解决方案


推荐阅读