All files / src/hooks useDownloadCsv.ts

0% Statements 0/30
100% Branches 1/1
100% Functions 1/1
0% Lines 0/30

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36                                                                       
import { CsvHeader } from '../models/csvHeader';
import { Buffer, Workbook, Worksheet } from 'exceljs';
import { ItemCsvList } from '../models/itemCsv';
import { DepreiationCsvList } from '../models/depreiationCsv';
 
export const useDownloadCsv = async (
  filename: string,
  sheetName: string,
  header: CsvHeader[],
  body: DepreiationCsvList | ItemCsvList
): Promise<void> => {
  const workbook: Workbook = new Workbook();
  const worksheet: Worksheet = workbook.addWorksheet(sheetName);
  // ヘッダーの設定
  worksheet.columns = header;
  // データの挿入
  worksheet.addRows(body.items);
  // CSVデータをバッファとして取得
  const csvBuffer: Buffer = await workbook.csv.writeBuffer();
  // Blobを作成
  // Blob .. バイナリデータを格納するimuutableなオブジェクト
  const blob: Blob = new Blob([csvBuffer], {
    type: 'text/csv;charset=utf-8;',
  });
  // バイナリデータを保持するURLの一種
  const url: string = window.URL.createObjectURL(blob);
  // ダウンロード
  const a: HTMLAnchorElement = document.createElement('a');
  a.href = url;
  a.download = filename;
  a.click();
  a.remove();
  // リソースを解放
  URL.revokeObjectURL(url);
};