Что за ошибка при выполнении скрипта и как ее исправить?
Вот ошибка:
Error: Worksheet name already exists: Найдено предупреждений в Sitema
    at set name [as name] (/Users/bokkdanil/Projects/SEO/Seo-Report-Generator/node_modules/exceljs/lib/doc/worksheet.js:170:13)
    at file:///Users/bokkdanil/Projects/SEO/Seo-Report-Generator/work_with_docs/modifyExcel.js:105:32
    at runNextTicks (node:internal/process/task_queues:60:5)
    at process.processImmediate (node:internal/timers:449:9)

Вот скрипт:
import ExcelJS from "exceljs";
import XLSX from "xlsx";
import fs from "fs";
import path from "path";
import config from "./config.js"; 
import renameMappings from "./renameMappings.js";

/**
 * Функция для безопасного создания уникального имени листа.
 * Ограничивает длину до 31 символа и добавляет суффикс, если необходимо.
 */
const generateSafeSheetName = (desiredName, existingNames) => {
    const maxLength = 31;
    let safeName = desiredName.length > maxLength ? desiredName.substring(0, maxLength) : desiredName;
    let uniqueName = safeName;
    let counter = 1;

    while (existingNames.has(uniqueName)) {
        const suffix = `_${counter}`;
        // Убедимся, что итоговая длина не превышает 31 символ
        const truncatedLength = maxLength - suffix.length;
        uniqueName = (desiredName.length > truncatedLength ? desiredName.substring(0, truncatedLength) : desiredName) + suffix;
        counter++;
    }

    existingNames.add(uniqueName);
    return uniqueName;
};

// Функция для конвертации .xls в ExcelJS workbook с динамическим названием листа
const convertXlsToExcelJSWorkbook = async (inputPath, sheetName, existingNames) => {
    const workbookXLS = XLSX.readFile(inputPath);
    const worksheetXLS = workbookXLS.Sheets[workbookXLS.SheetNames[0]];
    const worksheetData = XLSX.utils.sheet_to_json(worksheetXLS, { header: 1 });

    const exceljsWorkbook = new ExcelJS.Workbook();
    const safeSheetName = generateSafeSheetName(sheetName, existingNames);
    const worksheet = exceljsWorkbook.addWorksheet(safeSheetName); // Название листа безопасно

    worksheetData.forEach((row, rowIndex) => {
        const newRow = worksheet.addRow(row);
        if (rowIndex === 0) {
            newRow.font = { bold: true };
        }
    });

    return exceljsWorkbook;
};

// Функция для удаления указанных столбцов
const removeColumns = (worksheet, columnsToRemove) => {
    const headerRow = worksheet.getRow(1);
    const columnsToDeleteIndices = [];

    headerRow.eachCell((cell, colNumber) => {
        if (columnsToRemove.includes(cell.value)) {
            columnsToDeleteIndices.push(colNumber);
        }
    });

    columnsToDeleteIndices.sort((a, b) => b - a).forEach(colNumber => {
        worksheet.spliceColumns(colNumber, 1);
    });
};

// Функция для заливки первой строки голубым цветом
const fillHeaderRow = (worksheet) => {
    const headerRow = worksheet.getRow(1);
    headerRow.eachCell((cell) => {
        cell.fill = {
            type: "pattern",
            pattern: "solid",
            fgColor: { argb: "ADD8E6" },
        };
        cell.font = { bold: true };
    });
};

// Основная функция для обработки файла
const processExcelFiles = async () => {
    const pLimit = (await import("p-limit")).default; // Динамический импорт p-limit
    const limit = pLimit(config.maxConcurrentTasks); // Регулируем это число для настройки многозадачности

    const existingSheetNames = new Set(); // Множество для отслеживания уникальных имён листов

    const tasks = renameMappings.map(mapping =>
        limit(async () => {
            const inputFilePathXls = path.join(config.directoryPath, `${mapping.newName}.xls`);
            const inputFilePathXlsx = path.join(config.directoryPath, `${mapping.newName}.xlsx`);
            const sheetName = mapping.newName; // Желаемое название листа

            // Если файл в формате .xlsx существует
            if (fs.existsSync(inputFilePathXlsx)) {
                console.log(`Работаем с файлом ${inputFilePathXlsx}`);
                const workbook = new ExcelJS.Workbook();
                await workbook.xlsx.readFile(inputFilePathXlsx);

                // Получаем существующие имена листов для обеспечения уникальности
                workbook.eachSheet((sheet) => {
                    existingSheetNames.add(sheet.name);
                });

                const worksheet = workbook.getWorksheet(1);
                const safeSheetName = generateSafeSheetName(sheetName, existingSheetNames);
                worksheet.name = safeSheetName; // Устанавливаем безопасное имя листа

                // Удаляем столбцы, если они указаны
                if (mapping.columns && mapping.columns.length > 0) {
                    removeColumns(worksheet, mapping.columns);
                }
                
                fillHeaderRow(worksheet);
                await workbook.xlsx.writeFile(inputFilePathXlsx);
                console.log(`Файл ${inputFilePathXlsx} обработан: заголовок окрашен.`);
            }

            // Если файл в формате .xls существует
            else if (fs.existsSync(inputFilePathXls)) {
                console.log(`Работаем с файлом ${inputFilePathXls}`);
                const workbook = await convertXlsToExcelJSWorkbook(inputFilePathXls, sheetName, existingSheetNames);
                const worksheet = workbook.getWorksheet(1);

                // Удаляем столбцы, если они указаны
                if (mapping.columns && mapping.columns.length > 0) {
                    removeColumns(worksheet, mapping.columns);
                }

                fillHeaderRow(worksheet);
                const outputFilePath = inputFilePathXls.replace(".xls", ".xlsx");
                await workbook.xlsx.writeFile(outputFilePath);

                // Удаляем исходный .xls файл
                fs.unlinkSync(inputFilePathXls);
                console.log(`Файл ${outputFilePath} сохранён, исходный .xls файл удалён.`);
            } else {
                console.log(`Файл ${mapping.newName} не найден.`);
            }
        })
    );

    // Запуск всех задач с использованием ограниченной многозадачности
    await Promise.all(tasks);
};

// Запускаем обработку
processExcelFiles().catch(err => console.error(err));