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
}