{"name":"Excel-NodeJs-Read-Write-Logic","generatedAt":"2026-10-04T08:25:35.841Z","languages":{"JavaScript":3192},"commitTotal":1,"commits":[{"sha":"c1705605abf7fe8ed7a7d79d9deb694e3154c5f8","message":"Initial commit: Add Excel utilities with read/write/search examples and comprehensive README","date":"2026-02-17T12:35:11Z","author":"Aayush Mishra","login":"Aayush-Mishraa","avatar":"https://avatars.githubusercontent.com/u/89012492?v=4","verified":false,"url":"https://github.com/Aayush-Mishraa/Excel-NodeJs-Read-Write-Logic/commit/c1705605abf7fe8ed7a7d79d9deb694e3154c5f8"}],"readmeHtml":"<div id=\"readme\" class=\"md\" data-path=\"README.md\"><article class=\"markdown-body entry-content container-lg\" itemprop=\"text\"><div class=\"markdown-heading\" dir=\"auto\"><h1 class=\"heading-element\" dir=\"auto\">ExcelUtils</h1><a id=\"user-content-excelutils\" class=\"anchor\" aria-label=\"Permalink: ExcelUtils\" href=\"#excelutils\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Excel read and write operations using ExcelJS: includes examples for reading data, finding cells by value, updating cells with column offsets, and dynamic search-and-replace functionality.</p>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">Overview</h2><a id=\"user-content-overview\" class=\"anchor\" aria-label=\"Permalink: Overview\" href=\"#overview\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">This project demonstrates how to work with Excel files using the ExcelJS library in Node.js. It includes multiple examples for common operations:</p>\n<ul dir=\"auto\">\n<li>Reading data from Excel sheets</li>\n<li>Finding cells by value</li>\n<li>Updating cells with row/column offsets</li>\n<li>Search and replace with dynamic offsets</li>\n</ul>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">Dependencies</h2><a id=\"user-content-dependencies\" class=\"anchor\" aria-label=\"Permalink: Dependencies\" href=\"#dependencies\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<ul dir=\"auto\">\n<li><code>exceljs</code>: ^4.4.0 - Excel file processing library supporting XLSX, XLS, CSV, and JSON formats</li>\n</ul>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">Setup</h2><a id=\"user-content-setup\" class=\"anchor\" aria-label=\"Permalink: Setup\" href=\"#setup\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Install dependencies:</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"npm install\"><pre>npm install</pre></div>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">Running Examples</h2><a id=\"user-content-running-examples\" class=\"anchor\" aria-label=\"Permalink: Running Examples\" href=\"#running-examples\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Update the file paths in each script to match your Excel file location, then run:</p>\n<div class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Read Excel file\nnode ExcelReadWriteLogic/excelDemo.js\n\n# Write/Search with offset\nnode ExcelReadWriteLogic/ReadWriteDynamicSearch.js\n\n# Search and replace (hardcoded value)\nnode ExcelReadWriteLogic/WriteDataExcelSenario2.js\n\n# Search and replace (with offset)\nnode ExcelReadWriteLogic/demo.js\"><pre><span class=\"pl-c\"><span class=\"pl-c\">#</span> Read Excel file</span>\nnode ExcelReadWriteLogic/excelDemo.js\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Write/Search with offset</span>\nnode ExcelReadWriteLogic/ReadWriteDynamicSearch.js\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Search and replace (hardcoded value)</span>\nnode ExcelReadWriteLogic/WriteDataExcelSenario2.js\n\n<span class=\"pl-c\"><span class=\"pl-c\">#</span> Search and replace (with offset)</span>\nnode ExcelReadWriteLogic/demo.js</pre></div>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">Line-by-Line Explanations</h2><a id=\"user-content-line-by-line-explanations\" class=\"anchor\" aria-label=\"Permalink: Line-by-Line Explanations\" href=\"#line-by-line-explanations\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">ReadWriteDynamicSearch.js</h3><a id=\"user-content-readwritedynamicsearchjs\" class=\"anchor\" aria-label=\"Permalink: ReadWriteDynamicSearch.js\" href=\"#readwritedynamicsearchjs\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">The main flow: load workbook -&gt; find a value -&gt; offset the cell -&gt; update -&gt; save.</p>\n<ol dir=\"auto\">\n<li><code>const ExcelJS = require('exceljs');</code> - Import ExcelJS library</li>\n<li><code>async function writeExcelFile(searchText, replaceText, chnage, filePath)</code> - Function to find and update a cell with optional offset</li>\n<li><code>const workbook = new ExcelJS.Workbook();</code> - Create a new workbook instance</li>\n<li><code>await workbook.xlsx.readFile(filePath)</code> - Load Excel file asynchronously</li>\n<li><code>const worksheet = workbook.getWorksheet('Sheet1');</code> - Get the worksheet named 'Sheet1'</li>\n<li><code>const output = await readExcel(worksheet, searchText)</code> - Call helper function to locate the search text</li>\n<li><code>const cell = worksheet.getCell(output.row, output.col+chnage.colChange)</code> - Get cell at found coordinates, plus column offset</li>\n<li><code>cell.value = replaceText</code> - Set new value to the cell</li>\n<li><code>await workbook.xlsx.writeFile(filePath)</code> - Save workbook back to file</li>\n<li><code>async function readExcel(worksheet, searchText)</code> - Helper function to scan and find a value</li>\n<li><code>worksheet.eachRow((row, rowNumber) =&gt; { ... })</code> - Iterate through each row</li>\n<li><code>row.eachCell((cell, colNumber) =&gt; { ... })</code> - Iterate through each cell in row</li>\n<li><code>if (cell.value === searchText)</code> - Check if cell matches search text</li>\n<li><code>output.row = rowNumber; output.col = colNumber;</code> - Store the coordinates when found</li>\n<li><code>return output;</code> - Return the found coordinates</li>\n</ol>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">excelDemo.js</h3><a id=\"user-content-exceldemojs\" class=\"anchor\" aria-label=\"Permalink: excelDemo.js\" href=\"#exceldemojs\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Basic read example that prints all cell values.</p>\n<ol dir=\"auto\">\n<li><code>const ExcelJS = require('exceljs');</code> - Import ExcelJS</li>\n<li><code>async function readExcelFile()</code> - Async function to read sheet</li>\n<li><code>const workbook = new ExcelJS.Workbook();</code> - Create workbook</li>\n<li><code>await workbook.xlsx.readFile(filePath)</code> - Read file into memory (I/O is async)</li>\n<li><code>const worksheet = workbook.getWorksheet('Sheet1');</code> - Get worksheet</li>\n<li><code>worksheet.eachRow((row, rowNumber) =&gt; { ... })</code> - Iterate rows</li>\n<li><code>row.eachCell((cell, colNumber) =&gt; { ... })</code> - Iterate cells</li>\n<li><code>console.log(cell.value);</code> - Print each cell value</li>\n<li><code>readExcelFile();</code> - Execute the function</li>\n</ol>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">WriteDataExcelSenario2.js</h3><a id=\"user-content-writedataexcelsenario2js\" class=\"anchor\" aria-label=\"Permalink: WriteDataExcelSenario2.js\" href=\"#writedataexcelsenario2js\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Find a specific hardcoded value and update it with a new value.</p>\n<ol dir=\"auto\">\n<li><code>let output = {row:-1, col:-1};</code> - Initialize output object to track found cell</li>\n<li><code>async function writeExcelFile()</code> - Function to search and replace</li>\n<li><code>const workbook = new ExcelJS.Workbook();</code> - Create workbook</li>\n<li><code>await workbook.xlsx.readFile(filePath)</code> - Load file</li>\n<li><code>const worksheet = workbook.getWorksheet('Sheet1');</code> - Get worksheet</li>\n<li><code>worksheet.eachRow(...)</code> - Loop through rows</li>\n<li><code>if (cell.value === \"Apple\")</code> - Check for hardcoded value \"Apple\"</li>\n<li><code>output.row = rowNumber; output.col = colNumber;</code> - Store coordinates</li>\n<li><code>const cell = worksheet.getCell(output.row, output.col)</code> - Get the found cell</li>\n<li><code>cell.value = (\"Aayush Mishra\")</code> - Update with new value</li>\n<li><code>await workbook.xlsx.writeFile(filePath)</code> - Save file</li>\n<li><code>writeExcelFile();</code> - Execute</li>\n</ol>\n<div class=\"markdown-heading\" dir=\"auto\"><h3 class=\"heading-element\" dir=\"auto\">demo.js</h3><a id=\"user-content-demojs\" class=\"anchor\" aria-label=\"Permalink: demo.js\" href=\"#demojs\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<p dir=\"auto\">Similar to ReadWriteDynamicSearch.js but without comments. Demonstrates search with offset capability.</p>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">Ideas and Improvements</h2><a id=\"user-content-ideas-and-improvements\" class=\"anchor\" aria-label=\"Permalink: Ideas and Improvements\" href=\"#ideas-and-improvements\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<ol dir=\"auto\">\n<li><strong>Add error handling</strong>: Check if the searched value is found before updating (avoid updating -1,-1 coordinates)</li>\n<li><strong>Support multiple sheets</strong>: Allow specifying sheet name as parameter instead of hardcoding 'Sheet1'</li>\n<li><strong>Batch operations</strong>: Add ability to find and replace multiple values in one operation</li>\n<li><strong>CSV/JSON support</strong>: ExcelJS also supports CSV and JSON, could add examples</li>\n<li><strong>Fix typo in variable names</strong>: Rename <code>chnage</code> to <code>change</code> and <code>rowchage</code> to <code>rowChange</code> for clarity</li>\n<li><strong>Create a utility module</strong>: Extract common functions into a reusable module</li>\n<li><strong>Add logging</strong>: Implement better logging for debugging and monitoring</li>\n<li><strong>Support formulas</strong>: Add examples of reading/writing formulas, not just values</li>\n<li><strong>Styling</strong>: Add examples of formatting cells (color, font, borders)</li>\n<li><strong>Validation</strong>: Add input validation for file paths and sheet names</li>\n</ol>\n<div class=\"markdown-heading\" dir=\"auto\"><h2 class=\"heading-element\" dir=\"auto\">Notes</h2><a id=\"user-content-notes\" class=\"anchor\" aria-label=\"Permalink: Notes\" href=\"#notes\"><svg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"><path d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"></path></svg></a></div>\n<ul dir=\"auto\">\n<li>All scripts hardcode file paths. Update these to match your system's paths before running.</li>\n<li>The library works with async/await for file I/O operations - all read/write operations are asynchronous.</li>\n<li>Make sure the Excel file has a sheet named 'Sheet1' or update the sheet name in the code.</li>\n<li>ExcelJS supports XLSX, XLS, CSV, and JSON formats automatically based on file extension.</li>\n</ul>\n</article></div>","tree":{"fileCount":8,"dirCount":1,"truncated":false,"extensions":[{"ext":"js","count":3},{"ext":"json","count":2},{"ext":"gitignore","count":1},{"ext":"other","count":1},{"ext":"md","count":1}],"topLevel":[{"name":"ExcelReadWriteLogic","type":"dir"},{"name":".gitignore","type":"file"},{"name":"package-lock.json","type":"file"},{"name":"package.json","type":"file"},{"name":"README.md","type":"file"}]}}