Skip to content

1. Membuat Laporan Excel

1. Instalasi package exceljs

Exceljs merupakan library JavaScript yang digunakan untuk membaca, menulis, dan memanipulasi berkas spreadsheet (format .xlsx)

Beberapa fitur ExcelJS meliputi:

  • Membuat dan mengedit berkas Excel dari awal.
  • Membaca dan menulis data ke sel-sel dalam berkas Excel.
  • Membuat berbagai jenis grafik dalam berkas Excel.
  • format seperti pengaturan gaya, font, lebar kolom, dan lainnya.
  • Mendukung formula Excel.
  • Membuat lembar kerja baru dan mengganti nama lembar kerja.
  • Mendukung penggabungan sel dan penyusunan ulang data dalam bentuk tabel.
  • Menyimpan hasil manipulasi ke dalam berkas .xlsx.
terminal
npm install exceljs

Dokumentasi resmi : https://github.com/exceljs/exceljs

2. Membuat service export excel

order.service.ts
async pdfReport(query: findAllOrderDto, res: Response): Promise<any> {
    const result = await this.findAll(query);

    try {
      const workbook = new Workbook();
      const worksheet = workbook.addWorksheet('Laporan');
      worksheet.columns = [
        { header: 'No.', key: 'no', width: 10 },
        { header: 'Nomor Order', key: 'nomor_order', width: 20 },
        { header: 'Tanggal Order', key: 'tanggal_order', width: 20 },
        { header: 'Nama Produk', key: 'nama_produk', width: 20 },
        { header: 'Jumlah', key: 'jumlah', width: 20 },
        { header: 'Harga', key: 'harga', width: 20 },
        { header: 'Nama Konsumen', key: 'nama_konsumen', width: 20 },
        { header: 'Total Bayar', key: 'total_bayar', width: 20 },
        { header: 'Dibuat oleh', key: 'created_by', width: 20 },
        { header: 'Diperbaharui oleh', key: 'updated_by', width: 20 },
      ];

      const merge: { start: number; finish: number }[] = [];

      let col = 1;
      result.data.forEach((item) => {
        if (item.order_detail.length >= 1) {
          merge.push({
            start: col + 1,
            finish: col + item.order_detail.length,
          });
          item.order_detail.map((order) => {
            col = col + 1;
            worksheet.addRow({
              no: col - 1,
              nomor_order: item.nomor_order,
              tanggal_order: item.tanggal_order,
              nama_produk: order.produk.nama_produk,
              jumlah: order.jumlah,
              harga: order.produk.harga,
              nama_konsumen: item.konsumen.nama_konsumen,
              total_bayar: 12000,
              created_by: item?.created_by?.nama,
              updated_by: item?.updated_by?.nama,
            });
          });
        } else {
          col = col + 1;
          worksheet.addRow({
            no: col - 1,
            nomor_order: item.nomor_order,
            tanggal_order: item.tanggal_order,
            nama_produk: '',
            jumlah: 0,
            harga: 0,
            nama_konsumen: item.konsumen.nama_konsumen,
            total_bayar: 12000,
            created_by: item?.created_by?.nama,
            updated_by: item?.updated_by?.nama,
          });
        }
      });

      merge.forEach((item) => {
        worksheet.mergeCells(item.start, 8, item.finish, 8);
      });

      res.setHeader(
        'Content-Type',
        'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
      );

      return workbook.xlsx.write(res).then(function () {
        res.status(200).end();
      });
    } catch (err) {
      console.log('err', err);
      throw new HttpException('Ada Kesalahan', HttpStatus.BAD_REQUEST);
    }
  }

3. Membuat Controller Export Excel

order.controller.ts
@Get('download-report-excel')
  async excelReport(
    @Res() res: Response,
    @Pagination() query: findAllOrderDto,
  ) {
    return this.orderService.pdfReport(query, res);
  }

4. Pengujian pada postman

Alt text

Warning

Jika sudah berhasil , silahkan klik sace response to file untuk menyimpan file excel ke komputer.

Buka File Excel

Alt text

Note

Silahkan explore pada dokumentasi resmi untuk pengaturan cell pada excel.