XLSX.pro
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>XLSX.pro - Universal XLSX Converter</title>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet">
<style>
:root {
--bg-color: #121212;
--container-bg: #1f1f1f;
--input-bg: #2a2a2a;
--text-color: #e0e0e0;
--button-color: #0f52ba;
--button-hover: #0c3e8a;
--accent: #6ec1e4;
}
body {
margin: 0;
font-family: 'Inter', sans-serif;
background: var(--bg-color);
color: var(--text-color);
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-image: radial-gradient(rgba(255,255,255,0.02) 1px, transparent 1px);
background-size: 40px 40px;
}
.container {
background: var(--container-bg);
padding: 30px;
border-radius: 12px;
box-shadow: 0 0 20px rgba(0,0,0,0.5);
max-width: 600px;
width: 100%;
}
h1 {
color: var(--accent);
text-align: center;
margin-bottom: 20px;
}
input, select, button {
width: 100%;
padding: 12px;
margin: 10px 0;
background-color: var(--input-bg);
color: var(--text-color);
border: 1px solid #333;
border-radius: 6px;
font-size: 16px;
}
button {
background-color: var(--button-color);
font-weight: 600;
cursor: pointer;
transition: background 0.3s ease;
}
button:hover {
background-color: var(--button-hover);
}
#download-link {
display: block;
text-align: center;
margin-top: 15px;
color: var(--accent);
font-weight: 600;
text-decoration: none;
}
</style>
</head>
<body>
<div class="container">
<h1>XLSX.pro - Universal XLSX Converter</h1>
<input type="file" id="file-input" accept=".xlsx"/>
<select id="format-select">
<option value="csv">Convert to CSV</option>
<option value="json">Convert to JSON</option>
<option value="html">Convert to HTML</option>
<option value="pdf">Convert to PDF</option>
<option value="xml">Convert to XML</option>
</select>
<button onclick="convert()">Convert</button>
<a id="download-link" style="display:none;">Download</a>
<div id="output"></div>
</div>
<!-- SheetJS & jsPDF Libraries -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<script>
function convert() {
const fileInput = document.getElementById("file-input");
const format = document.getElementById("format-select").value;
const downloadLink = document.getElementById("download-link");
if (!fileInput.files.length) {
alert("Please upload an XLSX file.");
return;
}
const reader = new FileReader();
reader.onload = function (e) {
const data = new Uint8Array(e.target.result);
const workbook = XLSX.read(data, { type: "array" });
const sheetName = workbook.SheetNames[0];
const sheet = workbook.Sheets[sheetName];
let output, mime, fileExt;
switch (format) {
case "csv":
output = XLSX.utils.sheet_to_csv(sheet);
mime = "text/csv";
fileExt = "csv";
break;
case "json":
output = JSON.stringify(XLSX.utils.sheet_to_json(sheet), null, 2);
mime = "application/json";
fileExt = "json";
break;
case "html":
output = XLSX.utils.sheet_to_html(sheet);
mime = "text/html";
fileExt = "html";
break;
case "pdf":
const html = XLSX.utils.sheet_to_html(sheet);
const { jsPDF } = window.jspdf;
const doc = new jsPDF();
doc.html(html, {
callback: function (doc) {
doc.save("converted.pdf");
},
x: 10,
y: 10
});
return;
case "xml":
const jsonData = XLSX.utils.sheet_to_json(sheet);
output = "<root>\\n";
jsonData.forEach((row) => {
output += " <row>\\n";
Object.entries(row).forEach(([key, value]) => {
output += ` <${key}>${value}</${key}>\\n`;
});
output += " </row>\\n";
});
output += "</root>";
mime = "application/xml";
fileExt = "xml";
break;
}
const blob = new Blob([output], { type: mime });
const url = URL.createObjectURL(blob);
downloadLink.href = url;
downloadLink.download = "converted." + fileExt;
downloadLink.textContent = "Download " + fileExt.toUpperCase();
downloadLink.style.display = "inline-block";
};
reader.readAsArrayBuffer(fileInput.files[0]);
}
</script>
</body>
</html>
Comments
Post a Comment