| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- import express from 'express';
- import multer from 'multer';
- import * as XLSX from 'xlsx';
- const router = express.Router();
- const upload = multer({ storage: multer.memoryStorage() });
- // 批量导入接口
- router.post('/import', upload.single('file'), (req: any, res: any) => {
- try {
- if (!req.file) {
- return res.status(400).json({ code: 400, message: 'No file uploaded' });
- }
- // 读取 Excel 文件
- const workbook = XLSX.read(req.file.buffer, { type: 'buffer' });
- // 获取第一个工作表
- const sheetName = workbook.SheetNames[0];
- const worksheet = workbook.Sheets[sheetName];
- // 转换为 JSON
- const jsonData = XLSX.utils.sheet_to_json(worksheet);
- res.json({
- code: 200,
- message: 'Import successful',
- data: jsonData,
- count: jsonData.length
- });
- } catch (error: any) {
- console.error('Import error:', error);
- res.status(500).json({ code: 500, message: 'Import failed', error: error.message });
- }
- });
- // 批量导出接口
- router.get('/export', (req: any, res: any) => {
- try {
- // 模拟数据 (实际应从数据库获取)
- const data = [
- { id: 1, name: 'Alice', email: 'alice@example.com', role: 'admin' },
- { id: 2, name: 'Bob', email: 'bob@example.com', role: 'user' },
- { id: 3, name: 'Charlie', email: 'charlie@example.com', role: 'user' }
- ];
- // 创建工作簿和工作表
- const workbook = XLSX.utils.book_new();
- const worksheet = XLSX.utils.json_to_sheet(data);
-
- // 将工作表添加到工作簿
- XLSX.utils.book_append_sheet(workbook, worksheet, 'Users');
- // 生成 Buffer
- const buffer = XLSX.write(workbook, { type: 'buffer', bookType: 'xlsx' });
- // 设置响应头
- res.setHeader('Content-Disposition', 'attachment; filename="export.xlsx"');
- res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
-
- // 发送文件
- res.send(buffer);
- } catch (error: any) {
- console.error('Export error:', error);
- res.status(500).json({ code: 500, message: 'Export failed', error: error.message });
- }
- });
- export default router;
|