const path = require("path"); // 디렉토리 경로
const exceljs = require("exceljs"); // 엑셀 관련 API
(async() => {
try{
const filename = "excelappend.xlsx"; // 파일명
const template = path.join(__dirname, filename); // 템플릿 파일 위치
const workbook = new exceljs.Workbook();
// Step. Excel Template 파일 Read
workbook.xlsx.readFile(template)
.then(() => {
// Step. 해당 템플릿 엑셀에서 Sheet1번 Sheet를 불러옴
const sheet = workbook.getWorksheet("Sheet1");
const stRow = 2; // 시작 Row번호
const edRow = 16; // 종료 Row번호
// Step. Sheet1의 각 Row에 데이터 추가
for(let nRow = stRow; nRow <= edRow; nRow++){
const curRow = sheet.getRow(nRow); // 현재 Row
const seq = (nRow - stRow) + 1; // 순번
// Step. 해당 Row의 각 Cell에 값 설정
curRow.getCell("A").value = seq;
curRow.getCell("B").value = "홍길동";
curRow.getCell("C").value = "안녕하세요 반가워요 #" + seq;
// Step. 해당 Row의 변경 값 Apply
curRow.commit();
}
// Step. 수정된 Workbook을 template로 덮어씌움
workbook.xlsx.writeFile(template);
})
}catch(err){
console.log(err.message);
}
})();
업무를 하다 보면 기존 엑셀에 덮어씌워야 하는 경우가 발생하곤 합니다. 이 경우 exceljs를 적절히 잘 활용하면 아래와 같은 결과물을 받아볼 수 있습니다.
헤더와 기존 엑셀에 적용한 스타일들은 그대로 두고 공란만 채워 넣은 상태입니다.
api 설치
$> npm i exceljs --save |
우선 아래와 같이 사용할 API를 선언해줍니다.
path는 Template파일을 불러오기 위해 사용된 API이고
exceljs는 엑셀의 값을 채워주고 덮어씌워주기 위해 사용된 API입니다.
const path = require("path"); // 디렉토리 경로
const exceljs = require("exceljs"); // 엑셀 관련 API
그다음 변경할 대상 템플릿 엑셀파일을 filename으로 지정해 주고, 해당 파일을 현재 source파일과 동일한 위치에 배치합니다.
__dirname은 현재 js파일의 위치이고, path.join을 하게 되면 해당 위치 기준으로 filename의 파일을 찾게 됩니다. 이후 생성된 workbook 변수에 template 파일을 읽어 들입니다.
const filename = "excelappend.xlsx"; // 파일명
const template = path.join(__dirname, filename); // 템플릿 파일 위치
const workbook = new exceljs.Workbook();
// Step. Excel Template 파일 Read
workbook.xlsx.readFile(template)
읽어 들인 템플릿이 정상적인 경우, 해당 workbook에서 변경하려는 Sheet를 불러옵니다. Sheet명의 기준은 엑셀의 하단에 Sheet명으로 지정해 줍니다.
그다음 각 Sheet의 Row를 For Loop를 수행하며, 한 줄씩 데이터를 입력해 줍니다.
// Step. 해당 템플릿 엑셀에서 Sheet1번 Sheet를 불러옴
const sheet = workbook.getWorksheet("Sheet1");
const stRow = 2; // 시작 Row번호
const edRow = 16; // 종료 Row번호
// Step. Sheet1의 각 Row에 데이터 추가
for(let nRow = stRow; nRow <= edRow; nRow++){
const curRow = sheet.getRow(nRow); // 현재 Row
const seq = (nRow - stRow) + 1; // 순번
// Step. 해당 Row의 각 Cell에 값 설정
curRow.getCell("A").value = seq;
curRow.getCell("B").value = "홍길동";
curRow.getCell("C").value = "안녕하세요 반가워요 #" + seq;
// Step. 해당 Row의 변경 값 Apply
curRow.commit();
}
마지막으로 수정된 workbook 내용을 Template에 입력해 줍니다. (※ 만약 여기서 Template를 덮어씌우는 게 아닌 새로운 파일로 지정하고 싶다면 해당 파일을 Template파일을 path에서 join 했듯이 선언하여 주면 됩니다.)
// Step. 수정된 Workbook을 template로 덮어씌움
workbook.xlsx.writeFile(template);
실행
$> node excelappend.js |
오류
만약 실행을 했는데 아래와 같은 오류가 발생한 경우
이는 현재 사용하려는 엑셀 파일인 excelappend.xlsx가 열려있기 때문에 덮어씌우기가 안 되는 상태이므로 해당 엑셀 파일을 닫아주면 됩니다.
'개발 창고 > NodeJS' 카테고리의 다른 글
[알고리즘] 이진트리 (B-Tree) (0) | 2023.01.25 |
---|---|
[VanillaJS] 변수 JSON 변환 가능 여부 체크 (0) | 2023.01.18 |
[Javascript] split - 정수 배열 만들기 (0) | 2023.01.12 |
[Mail] nodemailer - 메일 발송하기 (1) | 2022.12.30 |
[Scheduler] node-scheduler (0) | 2022.12.28 |