1 min read

Export Dataset to Excel

utils
import { utils, writeFile } from "xlsx";

type HandleExportDataParams<TData> = {
  dataSource: Array<TData> | undefined;
  tableMapper?: (rowData: TData) => Record<string, any>;
  filename?: string;
};
const handleExportData = async <TData extends object>({
  dataSource,
  tableMapper,
  filename,
}: HandleExportDataParams) => {
  const data = [...(dataSource ?? [])];
  const mappedData = tableMapper ? data.map(tableMapper) : data;
  const worksheet = utils.json_to_sheet(mappedData);
  const workbook = utils.book_new();
  utils.book_append_sheet(workbook, worksheet, "Export");
  writeFile(workbook, ensureXlsxExtension(filename ?? "export.xlsx"), {
    compression: true,
  });
};

function ensureXlsxExtension(input: string): string {
  if (!input) return ".xlsx";
  return input.endsWith(".xlsx") ? input : input.replace(/\.[^/.]*$/, "") + ".xlsx";
}

References: