Powered By Blogger

Search Here!

Tuesday, October 8, 2024

Read Excel Content


const XLSX = require("xlsx");
/*
 * Reads content from a specified or latest downloaded Excel file.
 *
 * @param {string|null} [fileName=null] - The name of the Excel file.
*If null, the latest downloaded file will be used.
 * @param {number|null} [rowToCheck=null] - The row number in the
 *Excel content to retrieve (1-based index). If null, all rows will
 *be returned.
 * @returns {Promise<Object|Object[]>} - The content of the
*specified row or all rows if rowToCheck is not provided.
 */
async function getExcelContent(fileName = null, rowToCheck = null) {
    // Define the download directory path
    const downloadDir = CONSTANTS.FILE.FILE_PATH;

    let excelFilePath;

    if (fileName !== null) {
        // Use the provided filename to construct the file path
        excelFilePath = `${downloadDir}/${fileName}`;
        console.log(`Reading content from the specified file:
                        ${fileName}`);
    } else {
        // Get the latest downloaded file name
        const latestDownloadedFileName =
                    await this.getLatestDownloadedFileName();

      // Construct the full path of the latest downloaded Excel file
        excelFilePath = `${downloadDir}/${latestDownloadedFileName}`;
        console.log(
            `Reading content from the latest downloaded file:
                        ${latestDownloadedFileName}`
        );
    }

    // Read the Excel file
    const workbook = XLSX.readFile(excelFilePath);
    const sheetName = workbook.SheetNames[0]; // Get the first sheet
    const sheet = workbook.Sheets[sheetName];
    const data = XLSX.utils.sheet_to_json(sheet);
    // Convert sheet to JSON

    // Print each row of the Excel content in a prettier format
    console.log(`Content of the file ${fileName ||
                                "latest downloaded Excel"}:`);
    data.forEach((row, index) => {
        console.log(`Row ${index + 1}:`);
        for (const [key, value] of Object.entries(row)) {
            console.log(`  ${key}: ${value}`);
        }
        console.log(""); // Add a blank line between rows for
                // readability
    });

    // Return data based on the specified row or all rows
    //if rowToCheck is not provided
    if (rowToCheck !== null) {
        if (rowToCheck < 1 || rowToCheck > data.length) {
           console.warn(`Row number ${rowToCheck} is out of range.`);
           return {}; // Return an empty object if the row number
                // is out of range
        }
        return data[rowToCheck - 1]; // Return the specified row
    }

    return data; // Return all rows
}

No comments:

Post a Comment