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: