Guide
Installation
vue-xlsx
is released on npm so:
npm install -save vue-xlsx
or
yarn add vue-xlsx
Quick Start
vue-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/vue-xlsx.es.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
}
]
}
]