node xlsx (excel) 생 성, 다운로드 실현
node 엔 드 는 데 이 터 를 xlsx 파일 로 만 들 고 전단 에서 다운 로드 를 누 르 십시오.
프로젝트 원본:https://github.com/linwalker/output-xlsx-demo
조작 하 다.
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 를 이용 하여 엑셀 파일 을 처리 합 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.