Closed2

express, Excel生成ダウンロード

knaka Tech-Blogknaka Tech-Blog

概要

expressで、excel生成のメモになります。

  • exceljs使います

環境

  • express
  • node: 20

作成したコード

  • 関連のパス
  • /test_excel

https://github.com/kuc-arc-f/express_api_18excel


  • package.json
{
  "scripts": {
    "start": "ts-node src/index.ts",
    "dev": "ts-node-dev --respawn src/index.ts",
    "build": "rimraf dist && tsc",
    "deploy": "npm run build && vercel --prod"
  },
  "devDependencies": {
    "@types/express": "^4.17.13",
    "@types/node": "^17.0.32",
    "rimraf": "^3.0.2",
    "ts-node": "^10.7.0",
    "typescript": "^4.6.4"
  },
  "dependencies": {
    "cookie-parser": "^1.4.6",
    "cors": "^2.8.5",
    "csrf": "^3.1.0",
    "dotenv": "^16.0.1",
    "exceljs": "^4.3.0",
    "express": "^4.17.1",
    "express-session": "^1.17.2",
    "log4js": "^6.4.4",
    "pg": "^8.7.3",
    "ts-node-dev": "^1.1.8"
  }
}

knaka Tech-Blogknaka Tech-Blog

  • routes/index.ts
  • GET で、excel バイナリを、ダウンロードします
index.ts
router.get('/test_excel', async function(req: any, res: any) {
    try {
console.log("#test_excel-start");
        const workbook = new ExcelJS.Workbook();
        workbook.addWorksheet('My Sheet');
        const worksheet = workbook.getWorksheet('My Sheet');
        // 列を定義
        worksheet.columns = [
        { header: 'ID', key: 'id' },
        { header: '名称', key: 'name' },
        { header: '価格', key: 'price' },
        ];
        // 行を定義
        worksheet.addRow({id: 1001, name: 'みかん', price: 370});
        worksheet.addRow({id: 1002, name: 'バナナ', price: 200});
        worksheet.addRow({id: 1003, name: 'りんご', price: 260});
        worksheet.addRow({id: 1004, name: 'トマト', price: 210});
        const uint8Array = await workbook.xlsx.writeBuffer();   
//console.log(uint8Array);
        res.setHeader('Content-Type', 'application/octet-stream');
        res.setHeader('Content-Disposition', 'attachment; filename=test.xlsx'); // ファイル名を指定
        // バイナリデータをレスポンスとして送信
        res.send(uint8Array);
        console.log("#test_excel-end");
    } catch (error) {
        res.sendStatus(500);
    }
});

  • onedrive で、ひらきました

このスクラップは2023/09/24にクローズされました