Hello Friends, Today we will learn about how to export the data table in RecatJS
Prerequisites: You have created react app
Step 1: Install the packages to export the datatable
npm install primeflex primeicons primereact file-saver
Step 2: In your Component add the following Code to export the data.
import React, { useState, useEffect, useRef } from "react"; import { DataTable } from "primereact/datatable"; import { Column } from "primereact/column"; import { Button } from "primereact/button"; import { Tooltip } from "primereact/tooltip"; function TableComponent() { const [products, setProducts] = useState([]); const [selectedProducts, setSelectedProducts] = useState([]); const [importedData, setImportedData] = useState([]); const [selectedImportedData, setSelectedImportedData] = useState([]); const [importedCols, setImportedCols] = useState([ { field: "", header: "Header" } ]); const dt = useRef(null); const toast = useRef(null); const cols = [ { field: "code", header: "Code" }, { field: "name", header: "Name" }, { field: "category", header: "Category" }, { field: "quantity", header: "Quantity" } ]; const exportColumns = cols.map((col) => ({ title: col.header, dataKey: col.field })); const data=[ {"id": "1000","code": "f230fh0g3","name": "Bamboo Watch","description": "Product Description","image": "bamboo-watch.jpg","price": 65,"category": "Accessories","quantity": 24,"inventoryStatus": "INSTOCK","rating": 5}, {"id": "1001","code": "nvklal433","name": "Black Watch","description": "Product Description","image": "black-watch.jpg","price": 72,"category": "Accessories","quantity": 61,"inventoryStatus": "INSTOCK","rating": 4}, {"id": "1002","code": "zz21cz3c1","name": "Blue Band","description": "Product Description","image": "blue-band.jpg","price": 79,"category": "Fitness","quantity": 2,"inventoryStatus": "LOWSTOCK","rating": 3}, {"id": "1003","code": "244wgerg2","name": "Blue T-Shirt","description": "Product Description","image": "blue-t-shirt.jpg","price": 29,"category": "Clothing","quantity": 25,"inventoryStatus": "INSTOCK","rating": 5}, {"id": "1004","code": "h456wer53","name": "Bracelet","description": "Product Description","image": "bracelet.jpg","price": 15,"category": "Accessories","quantity": 73,"inventoryStatus": "INSTOCK","rating": 4}, {"id": "1005","code": "av2231fwg","name": "Brown Purse","description": "Product Description","image": "brown-purse.jpg","price": 120,"category": "Accessories","quantity": 0,"inventoryStatus": "OUTOFSTOCK","rating": 4}, {"id": "1006","code": "bib36pfvm","name": "Chakra Bracelet","description": "Product Description","image": "chakra-bracelet.jpg","price": 32,"category": "Accessories","quantity": 5,"inventoryStatus": "LOWSTOCK","rating": 3}, {"id": "1007","code": "mbvjkgip5","name": "Galaxy Earrings","description": "Product Description","image": "galaxy-earrings.jpg","price": 34,"category": "Accessories","quantity": 23,"inventoryStatus": "INSTOCK","rating": 5}, {"id": "1008","code": "vbb124btr","name": "Game Controller","description": "Product Description","image": "game-controller.jpg","price": 99,"category": "Electronics","quantity": 2,"inventoryStatus": "LOWSTOCK","rating": 4}, {"id": "1009","code": "cm230f032","name": "Gaming Set","description": "Product Description","image": "gaming-set.jpg","price": 299,"category": "Electronics","quantity": 63,"inventoryStatus": "INSTOCK","rating": 3} ] useEffect(() => { setProducts(data) }, []); const exportCSV = (selectionOnly) => { dt.current.exportCSV({ selectionOnly }); }; const exportPdf = () => { import("jspdf").then((jsPDF) => { import("jspdf-autotable").then(() => { const doc = new jsPDF.default(0, 0); doc.autoTable(exportColumns, products); doc.save("products.pdf"); }); }); }; const exportExcel = () => { import("xlsx").then((xlsx) => { const worksheet = xlsx.utils.json_to_sheet(products); const workbook = { Sheets: { data: worksheet }, SheetNames: ["data"] }; const excelBuffer = xlsx.write(workbook, { bookType: "xlsx", type: "array" }); saveAsExcelFile(excelBuffer, "products"); }); }; const saveAsExcelFile = (buffer, fileName) => { import("file-saver").then((module) => { if (module && module.default) { let EXCEL_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"; let EXCEL_EXTENSION = ".xlsx"; const data = new Blob([buffer], { type: EXCEL_TYPE }); module.default.saveAs( data, fileName + "_export_" + new Date().getTime() + EXCEL_EXTENSION ); } }); }; const toCapitalize = (s) => { return s.charAt(0).toUpperCase() + s.slice(1); }; const clear = () => { setImportedData([]); setSelectedImportedData([]); setImportedCols([{ field: "", header: "Header" }]); }; const onImportSelectionChange = (e) => { setSelectedImportedData(e.value); const detail = e.value.map((d) => Object.values(d)[0]).join(", "); toast.current.show({ severity: "info", summary: "Data Selected", detail, life: 3000 }); }; const onSelectionChange = (e) => { setSelectedProducts(e.value); }; const header = ( <div className="flex align-items-center export-buttons"> <Button type="button" icon="pi pi-file" onClick={() => exportCSV(false)} className="mr-2" data-pr-tooltip="CSV" /> <Button type="button" icon="pi pi-file-excel" onClick={exportExcel} className="p-button-success mr-2" data-pr-tooltip="XLS" /> <Button type="button" icon="pi pi-file-pdf" onClick={exportPdf} className="p-button-warning mr-2" data-pr-tooltip="PDF" /> <Button type="button" icon="pi pi-filter" onClick={() => exportCSV(true)} className="p-button-info ml-auto" data-pr-tooltip="Selection Only" /> </div> ); return ( <div> <div className="card"> <h5>Export</h5> <Tooltip target=".export-buttons>button" position="bottom" /> <DataTable ref={dt} value={products} header={header} dataKey="id" responsiveLayout="scroll" selectionMode="multiple" selection={selectedProducts} onSelectionChange={onSelectionChange} > {cols.map((col, index) => ( <Column key={index} field={col.field} header={col.header} /> ))} </DataTable> </div> </div> ); }; export default TableComponent
– Here is a Video for reference.