Programing

Nodejs로 Excel 파일을 만드는 방법은 무엇입니까?

lottogame 2020. 11. 17. 07:41
반응형

Nodejs로 Excel 파일을 만드는 방법은 무엇입니까?


저는 nodejs 프로그래머입니다. 이제 Excel 파일 형식으로 저장하려는 데이터 테이블이 있습니다. 어떻게해야합니까?

몇 가지 Node 라이브러리를 찾았습니다. 하지만 대부분은 Excel Writer가 아닌 Excel Parser입니다. 저는 Linux Server를 사용하고 있습니다. 따라서 Linux에서 실행할 수있는 것이 필요합니다. 알고있는 유용한 라이브러리가 있으면 알려주세요.

아니면 CSV 파일을 xls 파일 (프로그래밍 방식)로 변환 할 수있는 방법이 있습니까?


excel4node공식 사양에서 빌드 된 유지 관리되는 기본 Excel 파일 생성기 입니다. 유사하지만 다른 답변에서 언급 한 mxexcel-builder 보다 더 유지 됩니다.

// Require library
var excel = require('excel4node');

// Create a new instance of a Workbook class
var workbook = new excel.Workbook();

// Add Worksheets to the workbook
var worksheet = workbook.addWorksheet('Sheet 1');
var worksheet2 = workbook.addWorksheet('Sheet 2');

// Create a reusable style
var style = workbook.createStyle({
  font: {
    color: '#FF0800',
    size: 12
  },
  numberFormat: '$#,##0.00; ($#,##0.00); -'
});

// Set value of cell A1 to 100 as a number type styled with paramaters of style
worksheet.cell(1,1).number(100).style(style);

// Set value of cell B1 to 300 as a number type styled with paramaters of style
worksheet.cell(1,2).number(200).style(style);

// Set value of cell C1 to a formula styled with paramaters of style
worksheet.cell(1,3).formula('A1 + B1').style(style);

// Set value of cell A2 to 'string' styled with paramaters of style
worksheet.cell(2,1).string('string').style(style);

// Set value of cell A3 to true as a boolean type styled with paramaters of style but with an adjustment to the font size.
worksheet.cell(3,1).bool(true).style(style).style({font: {size: 14}});

workbook.write('Excel.xlsx');

그냥 간단한 방법을 찾았어요. 이것은 작동합니다-

구분 기호로 탭을 사용하여 파일을 만듭니다 (CSV와 유사하지만 쉼표를 Tab으로 대체). 확장자 .XLS로 저장하십시오. 파일은 Excel에서 열 수 있습니다.

도움이되는 코드-

var fs = require('fs');
var writeStream = fs.createWriteStream("file.xls");

var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
var row1 = "0"+"\t"+" 21"+"\t"+"Rob"+"\n";
var row2 = "1"+"\t"+" 22"+"\t"+"bob"+"\n";

writeStream.write(header);
writeStream.write(row1);
writeStream.write(row2);

writeStream.close();

이렇게하면 XLS 파일 형식으로 파일이 생성됩니다. XLS 대신 XLSX를 시도하면 작동하지 않습니다.


msexcel-builder를 사용하십시오 . 다음과 함께 설치하십시오.

npm install msexcel-builder

그때:

// Create a new workbook file in current working-path 
var workbook = excelbuilder.createWorkbook('./', 'sample.xlsx')

// Create a new worksheet with 10 columns and 12 rows 
var sheet1 = workbook.createSheet('sheet1', 10, 12);

// Fill some data 
sheet1.set(1, 1, 'I am title');
for (var i = 2; i < 5; i++)
  sheet1.set(i, 1, 'test'+i);

// Save it 
workbook.save(function(ok){
  if (!ok) 
    workbook.cancel();
  else
    console.log('congratulations, your workbook created');
});

ExcelJS 를 확인해야합니다.

CSV 및 XLSX 형식으로 작동합니다.

XLSX 스트림 읽기 / 쓰기에 적합합니다. XLSX 다운로드를 Express 응답 개체로 스트리밍하는 데 사용했습니다. 기본적으로 다음과 같습니다.

app.get('/some/route', function(req, res) {
  res.writeHead(200, {
    'Content-Disposition': 'attachment; filename="file.xlsx"',
    'Transfer-Encoding': 'chunked',
    'Content-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
  })
  var workbook = new Excel.stream.xlsx.WorkbookWriter({ stream: res })
  var worksheet = workbook.addWorksheet('some-worksheet')
  worksheet.addRow(['foo', 'bar']).commit()
  worksheet.commit()
  workbook.commit()
}

스트리밍 기능이 훨씬 제한적이므로 대용량 파일에 적합하며 excel4node 보다 훨씬 더 나은 성능을 발휘합니다 (20 장에 4 백만 개의 셀이 포함 된 파일의 경우 거의 5 분 후 메모리 사용량 많고 노드 프로세스 "메모리 부족"충돌 발생). 데이터가 생성 될 수있는 즉시 청크를 검색하기 위해 "commit ()"데이터를 허용하지 않습니다.)

this SO answer 도 참조하십시오 .


새 Office의 XLSx는 XML 및 기타 파일의 압축 모음 일뿐입니다. 그래서 당신은 그것을 생성하고 그에 따라 압축 할 수 있습니다.

보너스 : 스타일 등으로 매우 멋진 템플릿을 만들 수 있습니다.

  1. '좋아하는 스프레드 시트 프로그램'에서 템플릿 만들기
  2. ODS 또는 XLSx로 저장
  3. 콘텐츠 압축 해제
  4. 그것을 기반으로 사용하고 데이터로 채우십시오 content.xml(또는 xl/worksheets/sheet1.xml)
  5. 서빙하기 전에 모두 압축하십시오

그러나 나는 ODS (openoffice)가 훨씬 더 접근하기 쉽다는 것을 알았습니다 (엑셀은 여전히 ​​그것을 열 수 있습니다), 여기에서 찾은 것입니다. content.xml

<table:table-row table:style-name="ro1">
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here be a1</text:p>
    </table:table-cell>
    <table:table-cell office:value-type="string" table:style-name="ce1">
        <text:p>here is b1</text:p>
    </table:table-cell>
    <table:table-cell table:number-columns-repeated="16382"/>
</table:table-row>

또는-Express를 사용하여 @Jamaica Geek의 답변을 기반으로 파일을 저장하고 읽는 것을 방지합니다.

  res.attachment('file.xls');

  var header="Sl No"+"\t"+" Age"+"\t"+"Name"+"\n";
  var row1 = [0,21,'BOB'].join('\t')
  var row2 = [0,22,'bob'].join('\t');

  var c = header + row1 + row2;
  return res.send(c);

fs 패키지를 사용하여 JSON 데이터에서 Excel / CSV 파일을 만들 수 있습니다.

1 단계 : JSON 데이터를 변수에 저장합니다 (여기서는 jsn 변수에 있음).

2 단계 : 빈 문자열 변수를 만듭니다 (여기서는 data입니다 ).

3 단계 : jsn의 모든 속성 을 문자열 변수 데이터에 추가 '\t'하고 행을 완료 한 후 2 개 셀 사이에 넣고 '\ n'을 추가합니다.

코드 :

var fs = require('fs');

var jsn = [{
    "name": "Nilesh",
    "school": "RDTC",
    "marks": "77"
   },{
    "name": "Sagar",
    "school": "RC",
    "marks": "99.99"
   },{
    "name": "Prashant",
    "school": "Solapur",
    "marks": "100"
 }];

var data='';
for (var i = 0; i < jsn.length; i++) {
    data=data+jsn[i].name+'\t'+jsn[i].school+'\t'+jsn[i].marks+'\n';
 }
fs.appendFile('Filename.xls', data, (err) => {
    if (err) throw err;
    console.log('File created');
 });

Output


exceljs 설치

npm i exceljs --save

exceljs 가져 오기

var Excel = require('exceljs');
var workbook = new Excel.Workbook();

통합 문서 만들기

var options = {
                filename: __dirname+'/Reports/'+reportName,
                useStyles: true,
                useSharedStrings: true
            };

            var workbook = new Excel.stream.xlsx.WorkbookWriter(options);

워크 시트 생성 후

var worksheet = workbook.addWorksheet('Rate Sheet',{properties:{tabColor:{argb:'FFC0000'}}});

in worksheet.column array you pass column name in header and array key pass in key

worksheet.columns = [
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 35},
            { header: 'column name', key: 'array key', width: 20},

            ];

after using forEach loop append row one by one in exel file

array.forEach(function(row){ worksheet.addRow(row); })

you can also perfome loop on each exel row and cell

worksheet.eachRow(function(row, rowNumber) {
    console.log('Row ' + rowNumber + ' = ' + JSON.stringify(row.values));
});
row.eachCell(function(cell, colNumber) {
    console.log('Cell ' + colNumber + ' = ' + cell.value);
});

Although this question has several answers, they may now be a little dated.

New readers may prefer to consider the xlsx or "sheetsJS" package, which now seems to now be by far the most popular node package for this use case.

The current top answer recommends excel4node , which does look quite good - but the latter package seems less maintained (and far less popular) than the former.

Answering the question directly, using xlsx:

const XLSX = require('xlsx');

/* create a new blank workbook */
const wb = XLSX.utils.book_new();

// Do stuff, write data
//
//

// write the workbook object to a file
XLSX.writeFile(workbook, 'out.xlsx');

참고URL : https://stackoverflow.com/questions/17450412/how-to-create-an-excel-file-with-nodejs

반응형