DEV Community

Cover image for Generate Excel in VueJS using ExcelJS
Aditya Dewantara Fadillah
Aditya Dewantara Fadillah

Posted on

Generate Excel in VueJS using ExcelJS

Backstory for this case is i need to generate excel in VueJS (i dont know why we must to generate excel in frontend) and i dont know what to do. So at the first time i tried using vue-json-excel but i failed haha. So my friend suggested to try ExcelJS.

Ok so i assume you already install the ExcelJS using npm or yarn. And after that i made new file to export the excel. Why I made a new file not using inside the Vue Component, because I think i will use it later in different component so it will be easier for me to make it like global function. I make export.js file inside the mixins/ folder.

So, i need to generate excel from data that API given to Frontend. First of all inside the export.js i will make a function like this.

import * as ExcelJS from 'exceljs';

export const Export = {
    methods: {
        async exportToExcel (header, data, filename) {

        }
    }
}
Enter fullscreen mode Exit fullscreen mode

So what inside header, data and filename. This is the value of the variable and how to call it in the component we want.

import { Export } from '@/mixins/helper';

export default {
    ...
    mixins: [Export],
    ...
    methods: {
    exportExcel() {
            var data = [
                {id: 1, name: 'Agus', dob: '1997-02-01', grade: 'A'},
                {id: 2, name: 'Boni', dob: '1996-01-02', grade: 'C'},
                {id: 3, name: 'Tono', dob: '1995-12-03', grade: 'B'},
                {id: 4, name: 'Asep', dob: '1992-11-04', grade: 'D'},
                {id: 5, name: 'Marwinto', dob: '1997-10-05', grade: 'A'}
            ];

            // Important part is key and header
            var header = [
                {key: 'id', header:'ID', width: 10},
                {key: 'name', header:'Name', width: 40},
                {key: 'dob', header:'Date of Birt', width: 30},
                {key: 'grade', header:'Grade', width: 10}
            ];

            this.exportToExcel(header, data, 'Grade Report');
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Inside the function of in exportToExcel inside mixins/ is like this.

import * as ExcelJS from 'exceljs';

export const Export = {
    methods: {
        async exportToExcel (header, data, filename) {
            const options = {
                filename: filename + '.xlsx'
            }

            //Init Workbook
            const workbook = new ExcelJS.Workbook(options);
            const worksheet = workbook.addWorksheet(filename);

            worksheet.columns = fields;

            //Setting font size and bold for header
            worksheet.getRow(1).font = {
                bold: true
            };

            //Insert data row to excel the data key will follow header key
            for (let index = 0; index < data.length; index++) {
                worksheet.addRow(data[index])
            }

            //Export Excel to Base64
            const base64 = Buffer.from(await         

            workbook.xlsx.writeBuffer()).toString(
                'base64'
            )

            // Download File
            const a = document.createElement('a')
            a.href = 'data:application/xlsx;base64,' + base64 
            a.download = `${filename}.xlsx` // File name Here
            a.click()
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Just like that, so if you want to download it you must convert it to base64 and then you must make a element to make it downloadable.

Thats it, for another documentation you can see it in ExcelJS github and other website.

Hope this helps. Thank you! :)

Top comments (0)