# Guide
# Installation
vue3-xlsx
is released on npm so:
npm install -save vue3-xlsx
or
yarn add vue3-xlsx
# Quick Start
vue3-xlsx
uses a completely modular approach, you can mix and match our components however you want to.
The only rule is that importing
components must not be mixed with exporting
components
# Importing an XLSX file
<template>
<section>
<input type="file" @change="onChange" />
<xlsx-read :file="file">
<xlsx-json :sheet="selectedSheet">
<template #default="{collection}">
<div>
{{ collection }}
</div>
</template>
</xlsx-json>
</xlsx-read>
</section>
</template>
<script>
import XlsxRead from "./components/XlsxRead";
import XlsxJson from "./components/XlsxJson";
export default {
components: {
XlsxRead,
XlsxJson
},
data() {
return {
file: null,
};
},
methods: {
onChange(event) {
this.file = event.target.files ? event.target.files[0] : null;
},
}
}
</script>
TIP
In this example we are using xlsx-read
to take a sheet of the xlsx and transforms it in a json via xlsx-json
# Exporting an XLSX file
<template>
<section>
<xlsx-workbook>
<xlsx-sheet
:collection="sheet.data"
v-for="sheet in sheets"
:key="sheet.name"
:sheet-name="sheet.name"
/>
<xlsx-download>
<button>Download</button>
</xlsx-download>
</xlsx-workbook>
</section>
</template>
<script>
import XlsxWorkbook from "./components/XlsxWorkbook";
import XlsxSheet from "./components/XlsxSheet";
import XlsxDownload from "./components/XlsxDownload";
export default {
components: {
XlsxWorkbook,
XlsxSheet,
XlsxDownload
},
data() {
return {
sheets: [{ name: "SheetOne", data: [{ c: 2 }] }],
};
}
};
</script>
TIP
Here we are using xlsx-workbook
to create a new workbook and then xlsx-sheet
to add one or more sheet to the workbook. Via xlsx-download
we can download the resulting xlsx
# Example
# Code
<template>
<div>
<section>
<h3>Create XLSX</h3>
<div>
<input v-model="sheetName" placeholder="type a new sheet name" />
<button v-if="sheetName" @click="addSheet">Add Sheet</button>
</div>
<div>Sheets: {{ sheets }}</div>
<xlsx-workbook>
<xlsx-sheet
:collection="sheet.data"
v-for="sheet in sheets"
:key="sheet.name"
:sheet-name="sheet.name"
/>
<xlsx-download>
<button>Download</button>
</xlsx-download>
</xlsx-workbook>
</section>
<hr />
<section>
<h3>Import XLSX</h3>
<input type="file" @change="onChange" />
<xlsx-read :file="file">
<xlsx-sheets>
<template #default="{sheets}">
<select v-model="selectedSheet">
<option v-for="sheet in sheets" :key="sheet" :value="sheet">
{{ sheet }}
</option>
</select>
</template>
</xlsx-sheets>
<xlsx-table :sheet="selectedSheet" />
<xlsx-json :sheet="selectedSheet">
<template #default="{collection}">
<div>
{{ collection }}
</div>
</template>
</xlsx-json>
</xlsx-read>
</section>
</div>
</template>
<script>
import { XlsxRead, XlsxTable, XlsxSheets, XlsxJson, XlsxWorkbook, XlsxSheet, XlsxDownload } from "../../dist/vue3-xlsx.cjs.prod.js";
export default {
components: {
XlsxRead,
XlsxTable,
XlsxSheets,
XlsxJson,
XlsxWorkbook,
XlsxSheet,
XlsxDownload
},
data() {
return {
file: null,
selectedSheet: null,
sheetName: null,
sheets: [{ name: "SheetOne", data: [{ c: 2 }] }],
collection: [{ a: 1, b: 2 }]
};
},
methods: {
onChange(event) {
this.file = event.target.files ? event.target.files[0] : null;
},
addSheet() {
this.sheets.push({ name: this.sheetName, data: [...this.collection] });
this.sheetName = null;
}
}
};
</script>
# Try It
Create XLSX
Sheets: [
{
"name": "SheetOne",
"data": [
{
"c": 2
}
]
}
]