Excel to XML Folder Generator

Bulk generate XML files inside unique folders based on your dataset.

100% Browser-Based • Local Processing
Your files
Spreadsheet — .xlsx, .xls or .csv No file yet
XML template — with {{Column}} placeholders No file yet
Sample XML
first row

Add a spreadsheet Rows 0 Files 0 Placeholders 0

Before you generate1 to check

    Privacy Focused

    🔒 Local Processing. Your code never leaves your device.

    Instant Results

    🌐 Fully Client-Side. Runs instantly in your browser.

    No Signup

    ⚡ No accounts. No API keys. Just open and use.

    Browser Based

    🚀 No installs, no CLI, no build step.

    Streamlined Bulk XML Generation

    An Excel to XML folder generator turns every row of a spreadsheet into its own XML file, inside its own folder, packed into one ZIP. You write {{Column name}} into an XML template, pick the column that names the folders, and the batch is built from the sheet. It runs in your browser, and nothing is uploaded.

    The work it replaces is copying a template 500 times and editing each copy by hand, which is slow and which quietly goes wrong: a missed field, a name pasted into the wrong element, an ampersand that stops the file parsing. Here the mapping is written once as placeholders, the first row is shown filled in before anything is generated, and the problems the tool can see — a placeholder with no column, a duplicate folder name, a cell holding a spreadsheet error — are listed under the panes rather than discovered later in the batch.

    How to generate XML from Excel

    Upload your Excel dataset

    Drop an .xlsx, .xls or .csv onto the first zone. The first row of the sheet becomes the column names everything else works from. Open Your data to see what was actually read: a quantity of 0 stays 0 rather than going blank, a date stays a date rather than the serial number 45292, and a cell holding a spreadsheet error is listed under the panes instead of being read as the number 42. Parsing happens in the page. The file never leaves the tab.

    The Your data view of the same workbook, showing FormID, Customer, Qty and Note for three rows, with a quantity of 0 rendered as 0 rather than as an empty cell.
    The data view is the sheet as the tool read it — including the zero the old table left blank.
    Upload your XML template

    The template is an ordinary .xml file. Put {{Customer}} where a customer name belongs, {{Qty}} where a quantity belongs, and so on for any header in the sheet. Matching ignores case and surrounding spaces, so {{ qty }} and {{Qty}} both find a Qty column. Every value is XML-escaped on the way in, which is why a customer called Smith & Sons produces a file that still parses. A placeholder with no matching column resolves to empty and is named under the panes, so an unfilled field is never a silent one.

    A template written for the older tool still works. A <FormID> element is filled from whichever column you pick for the folder names.

    The generator with a workbook and a template loaded. The sample pane shows the first row filled in: FormID A-1001, Customer Smith and ampersand-escaped Sons, Qty 12, Note first delivery.
    Every {{Column}} is filled from the column of that name, and the ampersand comes out escaped.
    Map the FormID column and set the row range

    Pick the column whose values name the folders. Each row is then written to A-1001/form_A-1001.xml inside the ZIP, under whatever base folder you set. Two rows sharing an id used to write to one path, and the second silently replaced the first; both are kept now, the second as A-1001_2, and the pair is listed before you generate. First data row and Last data row cut a large sheet into batches you can run one at a time.

    Two rows sharing the id A-1001. The panel under the panes reads Folder A-1001 is already used by row 1, both are kept, this one is written as A-1001_2 rather than replacing the first.
    Two rows with one id used to become one file. Both are kept, and you are told before you generate.
    Check the live sample preview

    The Sample XML pane fills the first row of your range in and re-fills it as you change the mapping. Read it before you generate. A column mapped to the wrong placeholder is much cheaper to catch here than in 500 downloaded files. On a phone the sources and the preview become a tab pair, so the preview gets the full width of the screen rather than a strip beside the form.

    The generator on a phone. The two file zones and the four configuration fields sit under a Sources and Preview tab pair, with the Preview tab open on the filled sample XML.
    On a phone the two panes become tabs and only the open one is on screen.
    Generate the XML & folders

    Generate writes every file into a ZIP with JSZip and hands it straight to your downloads as xml-batch-<n>-files.zip. The three counters above the panes — Rows, Files and Placeholders — say what was read, what will be written and how many fields each document fills, so the numbers can be checked against the sheet before you commit. Nothing is uploaded at any point. The page works with the network off.

    Need a hand?

    Still have questions?

    If you can't find the answer you're looking for, feel free to contact our support team.

    Contact Us

    Frequently Asked Questions

    How do I generate XML files from Excel in bulk?

    Upload your Excel or CSV dataset and an XML template, map the template's placeholders to your columns, choose the ID column for folder naming and the row range, then click Generate. The tool fills the template from each row and returns a ZIP of structured folders — one XML file per record. A live preview lets you check the first row first. Everything runs in your browser.

    Does this upload my Excel or XML, and does it work offline?

    No upload, and yes it works offline. The spreadsheet is parsed, the template is filled, and the ZIP is built entirely in your browser using JavaScript — there's no server receiving your files, no logging, and no tracking. That matters because datasets often hold real records. Once the page has loaded it keeps working with no internet connection, which you can confirm in your browser's network tab.

    What file formats can I use for the dataset?

    Excel .xlsx and .xls, plus .csv. The tool reads the sheet in your browser, pulling out the header row and data rows so you can map columns to template placeholders. CSV works well for simple, flat data exported from almost anything; the Excel formats are handy when your source is already a workbook. Whichever you use, the file is read locally and never uploaded.

    How does the XML template and its placeholders work?

    Your template is a normal .xml file. Write {{Column name}} wherever a value from that column belongs — {{Customer}}, {{Qty}}, whatever your headers are called — and the tool fills every one of them once per row, producing one XML file per row with the structure held fixed and only the data changing. Matching ignores case and surrounding spaces, so {{ qty }} and {{Qty}} both find a Qty column. Every value is XML-escaped on the way in, which is why a customer called Smith & Sons produces a file that still parses rather than one no reader will open. A template written for the older tool also still works: a <FormID> element is filled from whichever column you pick for the folder names.

    What is the FormID column used for?

    It drives the naming and foldering. The value in your chosen ID column (for example a form or record ID) is used to name each row's folder and file, so the output is organized per record rather than a flat pile of files. Combined with the Base Output Path, it gives you a tidy folder tree inside the ZIP — one clearly named folder for each row you generate.

    Can I choose which rows to process?

    Yes. Set a Start Row and End Row to process exactly the records you want — the whole dataset, or just a slice. This is useful for testing (generate a handful first, confirm the output, then run the rest) and for splitting a large job into batches. Make sure the range matches your data so you don't accidentally skip rows or generate empty ones.

    What does the live sample preview show?

    It shows the generated XML for the first data row, using your current template and mapping, before you run the full batch. Think of it as a dry run: if the preview looks right, the rest of the rows will follow the same pattern; if a field is empty or wrong, you can fix the template or mapping first. It's the fastest way to catch mistakes early.

    How is the output structured, and how do I get it?

    You get a single ZIP file. Inside, files are organized under your Base Output Path into folders named from the ID column — typically one folder and XML file per processed row. The ZIP is built in your browser and downloaded directly, so you just unzip it and use the files. Nothing is stored on a server or sent anywhere; the download is entirely local.

    How large a dataset can it handle?

    It depends on your device. Because parsing, filling, and zipping all happen in the browser, the limit is your machine's memory and CPU rather than a server cap. Hundreds or a few thousand rows are usually fine; very large datasets (tens of thousands of rows, or huge templates) can be slow or memory-heavy. If you hit limits, use the row range to process the data in smaller batches.

    What happens if a template placeholder has no matching column?

    It resolves to empty, and it is named. The batch is never thrown out over one unmatched placeholder — that spot is simply left blank — but the tool lists every placeholder it could not match to a column in the panel under the panes, by name, before you generate anything. So an unfilled field is never a silent one, and you do not have to spot a blank in the preview to find a typo in a template field name.

    Can I use a CSV instead of a real Excel file?

    Yes. CSV is fully supported alongside .xlsx and .xls, and it's often the simplest option since almost every system can export it. The tool reads the header row for your column names and the data rows for the values, exactly as it does with a workbook. If your data is flat and you already have a CSV, there's no need to convert it to Excel first.

    Is it free, and are there limits?

    Yes, completely free — no payment, no signup, no account, and no usage caps or watermarks. Since everything runs in your browser, there's nothing for us to meter; the only practical limit is your device's performance on very large datasets. Generate as many batches as you like, including offline once the page has loaded.

    Still have questions?

    If you can't find the answer you're looking for, feel free to contact our support team.

    Contact Us