본문 바로가기

Node.js

[Exceljs] worksheet.columns location 엑셀 컬럼 위치 지정하기

반응형

 

node.js + typescript + exceljs 로 엑셀 파일 생성 및 내보내기를 진행하다가 

Exceljs의 addTable 로 테이블을 작성했었다. 

이후에 코드리뷰를 받고 table 생성을 아예 하지않고 아예 columns 추가 및 데이터를 InsertRows로 생성하도록 변경했다. 여기서 내가 어려움이 있었던 부분은 

 

I decided to use "worksheet.columns" + "insertRows" instead of using "addTable" function because the data I got from db is an array of objects and I had to refine the data for the rows of table again. but I can just use the data itself with insertRows right away without refining. but one problem I had was that if I use worksheet columns then it starts from the 'A1', the top of the sheet, and there is no way to set the location (if i'm not wrong) 

 

worksheet.columns = [
  { header: 'Id', key: 'id', width: 10 },
  { header: 'Name', key: 'name', width: 32 },
  { header: 'D.O.B.', key: 'DOB', width: 10, outlineLevel: 1 }
];

이렇게 하면 엑셀의 첫 A1부터 Row 가 시작된다. addTable 매서드는 위치를 지정하는 값이 있었는데 columns는 없는 것 같다. (못찾은 걸수도..) 일단 찾은 방법은 모든 columns + rows 를 만들고 (+css) 그 다음에 맨 위에 row를 splice 해서 새로운 빈 row 를 추가해주는 것이다. 

 

One solution I found was splicing rows from the top of the excel and add 4 empty rows, then the columns(headers) and data will be moved to 4 cells below.

 

worksheet.spliceRows(1, 0, [], [], [], []);

이렇게 해주면 [] x 4 = 4개의 빈 rows가 맨 위에부터 추가되어 기존의 columns (headers) 와 데이터들이 아래로 이동한다. --> headers가 'A5' row에 위치하게 됨. 

 

만약 더 좋은 방법이 있다면 댓글로 남겨주시면 감사하겠습니다!! 

If you have a better way, please leave a comment! 

 

 

 

Reference : https://www.npmjs.com/package/exceljs

반응형