node xlsx (excel) 생 성, 다운로드 실현

6233 단어
간단 한 소개
node 엔 드 는 데 이 터 를 xlsx 파일 로 만 들 고 전단 에서 다운 로드 를 누 르 십시오.
프로젝트 원본:https://github.com/linwalker/output-xlsx-demo
조작 하 다.
  • 다운로드 코드
  • node >= 7.8
  • npm install
  • node index.js
  • localhost 방문: 5000
  • xlsx
    js - xlsx 는 현재 js 처리 excel 을 처리 하 는 데 비교적 좋 은 라 이브 러 리 로 xlsx 를 생 성하 면 호출 XLSX.writeFile(workbook, filename) 된다.
    워 크 북 은 대상 입 니 다. 구 조 는 다음 과 같 습 니 다.
    //workbook
    {
        SheetNames: ['sheet1'],
        Sheets: {
            // worksheet
            'sheet1': {
                '!ref': 'A1:D4',//             ,      excel       
                // cell
                'A1': { ... },
                // cell
                'A2': { ... },
                ...
            }
        }
    }
    

    사용법
    xlsx 파일 을 생 성 할 데 이 터 를 위 워 크 북 대상 형식 으로 조정 하고 XSLX. writeFile (workbook, filename) 방법 을 호출 하면 됩 니 다.
    node 서비스
    node 서비스 파일 index, 간단 한 페이지 렌 더 링 과 다운로드 요청 처리.
    const Koa = require('koa');
    const Router = require('koa-router');
    const fs = require('fs');
    const path =require('path');
    const views = require('koa-views');
    const dlXlsx = require('./dlXlsx.js');
    const app = new Koa();
    const router = new Router();
    
    //      
    app.use(views(path.join(__dirname, './views'), {
        extension: 'html'
    }))
    
    //    
    router.get('/', async (ctx) => {
        await ctx.render('main');
    })
    //      
    router.get('/download', async (ctx) => {
        //  xlsx  
        await dlXlsx();
        //  
        ctx.type = '.xlsx';
        //    ,   xlsx  
        ctx.body = fs.readFileSync('output.xlsx');
        //     ,     xlsx  ,     ,       
        fs.unlink('output.xlsx');
    })
    //        
    app.use(router.routes()).use(router.allowedMethods())
    app.listen(5000);
    

    node 서 비 스 는 koa 2 프레임 워 크, node > = 7.8 을 기반 으로 async 와 await 를 직접 먹 어 비동기 요청 을 처리 할 수 있 습 니 다.
    xlsx 생 성 처리
    dlxlsx 생 성 dlxlsx. js 에서 처리
    //dlXlsx.js
    const XLSX = require('xlsx');
    //  
    const _headers = ['id', 'name', 'age', 'country'];
    //    
    const _data = [
        {
            id: '1',
            name: 'test1',
            age: '30',
            country: 'China',
        },
        ...
    ];
    const dlXlsx = () => {
        const headers = _headers
            .map((v, i) => Object.assign({}, { v: v, position: String.fromCharCode(65 + i) + 1 }))
                //   _headers           
                // [ { v: 'id', position: 'A1' },
                //   { v: 'name', position: 'B1' },
                //   { v: 'age', position: 'C1' },
                //   { v: 'country', position: 'D1' },
            .reduce((prev, next) => Object.assign({}, prev, { [next.position]: { v: next.v } }), {});
                //     worksheet      
                // { A1: { v: 'id' },
                //   B1: { v: 'name' },
                //   C1: { v: 'age' },
                //   D1: { v: 'country' },
    
        const data = _data
            .map((v, i) => _headers.map((k, j) => Object.assign({}, { v: v[k], position: String.fromCharCode(65 + j) + (i + 2) })))
                //    headers    ,          
                // [ [ { v: '1', position: 'A2' },
                //     { v: 'test1', position: 'B2' },
                //     { v: '30', position: 'C2' },
                //     { v: 'China', position: 'D2' }],
                //   [ { v: '2', position: 'A3' },
                //     { v: 'test2', position: 'B3' },
                //     { v: '20', position: 'C3' },
                //     { v: 'America', position: 'D3' }],
                //   [ { v: '3', position: 'A4' },
                //     { v: 'test3', position: 'B4' },
                //     { v: '18', position: 'C4' },
                //     { v: 'Unkonw', position: 'D4' }] ]
            .reduce((prev, next) => prev.concat(next))
                //             (          )
                // [ { v: '1', position: 'A2' },
                //   { v: 'test1', position: 'B2' },
                //   { v: '30', position: 'C2' },
                //   { v: 'China', position: 'D2' },
                //   { v: '2', position: 'A3' },
                //   { v: 'test2', position: 'B3' },
                //   { v: '20', position: 'C3' },
                //   { v: 'America', position: 'D3' },
                //   { v: '3', position: 'A4' },
                //   { v: 'test3', position: 'B4' },
                //   { v: '18', position: 'C4' },
                //   { v: 'Unkonw', position: 'D4' },
            .reduce((prev, next) => Object.assign({}, prev, { [next.position]: { v: next.v } }), {});
                //     worksheet      
                //   { A2: { v: '1' },
                //     B2: { v: 'test1' },
                //     C2: { v: '30' },
                //     D2: { v: 'China' },
                //     A3: { v: '2' },
                //     B3: { v: 'test2' },
                //     C3: { v: '20' },
                //     D3: { v: 'America' },
                //     A4: { v: '3' },
                //     B4: { v: 'test3' },
                //     C4: { v: '18' },
                //     D4: { v: 'Unkonw' }
        //    headers   data
        const output = Object.assign({}, headers, data);
        //           
        const outputPos = Object.keys(output);
        //      
        const ref = outputPos[0] + ':' + outputPos[outputPos.length - 1];
    
        //    workbook   
        const workbook = {
            SheetNames: ['mySheet'],
            Sheets: {
                'mySheet': Object.assign({}, output, { '!ref': ref })
            }
        };
       
        //    Excel
        XLSX.writeFile(workbook, 'output.xlsx')
    }
    

    레 퍼 런 스
    본문 은 주로 이 문장 을 참고 한다
    Node. js 에서 js - xlsx 를 이용 하여 엑셀 파일 을 처리 합 니 다.

    좋은 웹페이지 즐겨찾기