@dazzadev/vue-sheet-mapper

Vue 3 component for Excel and CSV imports: users match each column of their file to one of your fields
1,219
Install
npm install @dazzadev/vue-sheet-mapper
Latest Version:3.1.0
Vue:3
License:MIT
Last Updated:Aug 27, 2026
Links: GitHub  ·  npm
Maintainer: dazza-dev

vue-sheet-mapper

Your users upload a spreadsheet and say which column is which.
You get the data in the shape your app expects.

Give it your field list and it handles the upload, the column preview,
the auto-matching, the validation and the output.

npm bundle size license

Live demo →  ·  Changelog

Column mapping screen: each spreadsheet column is a card with a data preview — matched columns in green, an ignored column in orange, and an unmatched one waiting for the user to pick a field

Features

  • Excel & CSV — reads .xlsx, .xls and .csv, detecting the text encoding
  • Auto-match — maps columns to fields by key, label or aliases, accent-insensitive
  • Reactive schemas — pass a ref, computed or getter; fields may arrive from your API after the file is picked
  • Two output modes — the mapped rows, or the raw file plus a mapping dictionary for server-side imports
  • Bring your own validation — one hook hands you every row; zod, yup, your own function or your backend
  • i18n — 5 built-in locales (en, es, fr, pt, nl) with per-key overrides
  • Themeable — every visual property is a CSS custom property; icons and strings are replaceable
  • Headless — useSheetMapper carries the whole flow with no markup
  • TypeScript — full type declarations included

Installation

npm install @dazzadev/vue-sheet-mapper xlsx

xlsx is a peer dependency. Read Security before choosing a version — the copy published on npm is stale and carries unfixed advisories.

Quick start

<script setup lang="ts">
import { SheetMapper } from "@dazzadev/vue-sheet-mapper";
import "@dazzadev/vue-sheet-mapper/style.css";
import type { MappedResult, SchemaField } from "@dazzadev/vue-sheet-mapper";

const fields: SchemaField[] = [
  { key: "name", label: "Name", requireColumn: true },
  { key: "email", label: "Email", requireColumn: true },
];

function onMapped(results: MappedResult[]) {
  // one entry per assigned column
}
</script>

<template>
  <SheetMapper
    :fields="fields"
    @mapped="(results) => onMapped(results as MappedResult[])"
  />
</template>

Documentation

Everything else lives in the docs:

Guide Installation, security, validation, output modes, file handling, headless usage
Customization i18n, icons, matcher, transform, slots, CSS theming
API Props, events, TypeScript types, exports
Changelog Every release, with migration notes

Contributing

pnpm install
pnpm dev          # the demo, with hot reload
pnpm docs:dev     # the documentation site
pnpm test         # the suite
pnpm build        # typecheck + library build

License

MIT

Related Packages

vue-xlsx-table

View .xlsx file in browser for Vue2

6,582 149
element-import-excel

This is an import excel component based on element-plus

1,044 2
xlsx-to-table

View .xlsx file in browser for Vue2

475
xlsx-vue-viewer

Vue 3 component for the Excel spreadsheet editor. Self-contained: includes the e...

2,632 25

Version History

Version Released Vue License
3.1.0 >=3.3.0 MIT
3.0.0 >=3.3.0 MIT
2.0.1 >=3.3.0 MIT
2.0.0 >=3.3.0 MIT
1.0.0 >=3.3.0 MIT