If you've ever found yourself copying and pasting the same data across Excel tabs for the umpteenth time in a week… trust me, I get it.
At some point, those spreadsheets that were supposed to make our lives easier start feeling more like an unpaid internship.In this post, I’m eager to show you how I escaped the spreadsheet cycle and automated those repetitive data cleanup tasks with plain JavaScript—no frameworks or fancy libraries involved. It’s all about a bit of logic and some Node.js!
The Problem
Clients would send me data like this:
- Huge CSV files with inconsistent column names (Full Name, full_name, name_full)
- Mixed date formats (DD-MM-YYYY, YYYY/MM/DD)
- Duplicates and empty rows
- Repetitive filtering tasks (like removing inactive users)
I kept doing the same things in Excel until I decided: enough. Let’s script it.
Step 1: Read the File
For CSVs, I used csv-parse:
const fs = require('fs');
const parse = require('csv-parse');
fs.createReadStream('input.csv')
.pipe(parse({ columns: true }))
.on('data', (row) => {
// handle row
});
For Excel files:
const XLSX = require('xlsx');
const workbook = XLSX.readFile('data.xlsx');
const sheet = workbook.Sheets[workbook.SheetNames[0]];
const json = XLSX.utils.sheet_to_json(sheet);
Step 2: Clean the Data
Normalize headers:
function normalizeHeaders(row) {
const normalized = {};
for (let key in row) {
const newKey = key.trim().toLowerCase().replace(/\s+/g, '_');
normalized[newKey] = row[key];
}
return normalized;
}
data = data.map(normalizeHeaders);
Remove blank rows:
data = data.filter(row => Object.values(row).some(val => val !== ''));
Format dates:
function formatDate(dateStr) {
const date = new Date(dateStr);
return date.toISOString().split('T')[0]; // yyyy-mm-dd
}
data = data.map(row => ({
...row,
joined_date: formatDate(row.joined_date)
}));
Step 3: Export the Cleaned Data
const { writeFileSync } = require('fs');
const { stringify } = require('csv-stringify/sync');
const output = stringify(data, { header: true });
writeFileSync('cleaned.csv', output);
Boom — reusable cleanup in under 5 seconds.
Lessons Learned
- Plain JavaScript is enough for most data cleanup tasks.
- csv-parse + csv-stringify make CSV parsing easy.
- Once you write a cleanup script once, you never do it manually again.
TL;DR
- Ditch repetitive Excel formulas.
- Read CSV/Excel in JS.
- Normalize headers, clean rows, convert formats.
- Export back out — all automated.
Let me know if you've built similar automations or want to share some CSV horror stories
Top comments (0)