엑셀 또는 스프레드시트 파일을 Node.js 환경에서 다루고자 할 때, csv 파일을 사용합니다. Csv 파일은 여러 필드가 쉼표와 줄바꿈으로 표현된, 간단한 파일이므로, fs 모듈을 이용하여 쉽게 읽고쓰기 구현이 가능합니다. 하지만, 저는 아래의 라이브러리의 도움을 자주 받는 편입니다.
CSV Project - Node.js CSV package
This is a full-featured CSV parsing tool running entirely on your browser. No data leave your computer ! Use it also to learn how to use our packages and to test the various options interactively.
csv.js.org
위 라이브러리를 이용하면, Node.js 환경에서 엑셀 파일을 편리하게 다룰 수 있습니다. 확장자가 .xlsx
가 아님에 주의해야합니다. 엑셀에서 다른 이름으로 저장 하여 .csv
로 저장을 하거나, .xlsx
를 .csv
로 변환하는 과정을 거쳐야합니다.
종종, ios(맥) 환경에서 이렇게 생성한 csv 파일을 윈도우에서 열었을 때, 한글이 깨지는 현상이 발생할 수 있습니다. 인코딩 방식의 차이 때문입니다. 맥에서는 csv 파일의 기본 인코딩이 utf8 방식인 반면, 윈도우에서는 ANSI 방식이기 때문입니다. 고로, 이를 해결하는 방법은 두가지가 있습니다.
- 맥에서 csv 파일을 작성할 때, ANSI 방식을 사용하기
- 윈도우에서 csv 파일을 열 때, utf8 방식을 사용하기
보통 2의 방식을 주로 사용합니다. csv 파일을 활용하고자 하는 윈도우 PC에서 기본 csv 파일 인코딩 설정을 바꿀수도 있지만, csv 파일 자체에 이 파일은 "utf8 방식으로 여세요." 하고 명시하는 방식이 좋습니다. BOM 문자열을 이용하면 됩니다.
BOM(Byte Order Mar) 문자열은 파일의 가장 앞머리에 있는 문자열이며, (생략도 가능합니다) 인코딩 방식에 따라 여러가지 값으로 표현됩니다. 우리는 이 파일이 utf 방식으로 읽힐 수 있도록, \xef\xbb\xbf 혹은 \uFEFF 을 파일 말머리에 달아주면 됩니다.
위에 처음 소개드린 csv 라이브러리에서는 bom 옵션을 제공하고 있으니, 편리하게 이용하기만 하면 됩니다. 직접 csv 파일을 생성하는 코드를 짠다면, 아래처럼 구현해주면 됩니다. Node.js 가 아니라, 브라우저 환경에서도 정상 동작하는 코드입니다.
const rows = [{ name: '준성', point: 1 }, { name: '민수', point: 2 }];
const BOM = "\uFEFF";
let csvContent = "data:text/csv;charset=utf-8," + BOM;
csvContent += ['이름', '점수'].join(',') + '\n';
csvContent += rows.map(row => [row.name, row.point].join(',')).join('\n');
// 브라우저 환경에서 엑셀 다운로드 용으로 사용가능
console.log(encodeURI(csvContent));
'개발이야기' 카테고리의 다른 글
속터지는 Google Play Console 본인인증하기 (1) | 2025.02.06 |
---|---|
Cursor AI 사용 후기 - 나 개발자 밥그릇 뺏기겠는데? (0) | 2025.01.12 |
타입스크립트: ts2322 error 해결을 위한 서브타입 관련 개념 총정리 (1) | 2023.11.26 |
한글의 유니코드 인코딩과, javascript에서 한글 문자열을 다루는 방식 (1) | 2023.10.19 |
HTTP의 역사: 0.9부터 3.0까지 (1) | 2023.09.14 |
엑셀 또는 스프레드시트 파일을 Node.js 환경에서 다루고자 할 때, csv 파일을 사용합니다. Csv 파일은 여러 필드가 쉼표와 줄바꿈으로 표현된, 간단한 파일이므로, fs 모듈을 이용하여 쉽게 읽고쓰기 구현이 가능합니다. 하지만, 저는 아래의 라이브러리의 도움을 자주 받는 편입니다.
CSV Project - Node.js CSV package
This is a full-featured CSV parsing tool running entirely on your browser. No data leave your computer ! Use it also to learn how to use our packages and to test the various options interactively.
csv.js.org
위 라이브러리를 이용하면, Node.js 환경에서 엑셀 파일을 편리하게 다룰 수 있습니다. 확장자가 .xlsx
가 아님에 주의해야합니다. 엑셀에서 다른 이름으로 저장 하여 .csv
로 저장을 하거나, .xlsx
를 .csv
로 변환하는 과정을 거쳐야합니다.
종종, ios(맥) 환경에서 이렇게 생성한 csv 파일을 윈도우에서 열었을 때, 한글이 깨지는 현상이 발생할 수 있습니다. 인코딩 방식의 차이 때문입니다. 맥에서는 csv 파일의 기본 인코딩이 utf8 방식인 반면, 윈도우에서는 ANSI 방식이기 때문입니다. 고로, 이를 해결하는 방법은 두가지가 있습니다.
- 맥에서 csv 파일을 작성할 때, ANSI 방식을 사용하기
- 윈도우에서 csv 파일을 열 때, utf8 방식을 사용하기
보통 2의 방식을 주로 사용합니다. csv 파일을 활용하고자 하는 윈도우 PC에서 기본 csv 파일 인코딩 설정을 바꿀수도 있지만, csv 파일 자체에 이 파일은 "utf8 방식으로 여세요." 하고 명시하는 방식이 좋습니다. BOM 문자열을 이용하면 됩니다.
BOM(Byte Order Mar) 문자열은 파일의 가장 앞머리에 있는 문자열이며, (생략도 가능합니다) 인코딩 방식에 따라 여러가지 값으로 표현됩니다. 우리는 이 파일이 utf 방식으로 읽힐 수 있도록, \xef\xbb\xbf 혹은 \uFEFF 을 파일 말머리에 달아주면 됩니다.
위에 처음 소개드린 csv 라이브러리에서는 bom 옵션을 제공하고 있으니, 편리하게 이용하기만 하면 됩니다. 직접 csv 파일을 생성하는 코드를 짠다면, 아래처럼 구현해주면 됩니다. Node.js 가 아니라, 브라우저 환경에서도 정상 동작하는 코드입니다.
const rows = [{ name: '준성', point: 1 }, { name: '민수', point: 2 }];
const BOM = "\uFEFF";
let csvContent = "data:text/csv;charset=utf-8," + BOM;
csvContent += ['이름', '점수'].join(',') + '\n';
csvContent += rows.map(row => [row.name, row.point].join(',')).join('\n');
// 브라우저 환경에서 엑셀 다운로드 용으로 사용가능
console.log(encodeURI(csvContent));
'개발이야기' 카테고리의 다른 글
속터지는 Google Play Console 본인인증하기 (1) | 2025.02.06 |
---|---|
Cursor AI 사용 후기 - 나 개발자 밥그릇 뺏기겠는데? (0) | 2025.01.12 |
타입스크립트: ts2322 error 해결을 위한 서브타입 관련 개념 총정리 (1) | 2023.11.26 |
한글의 유니코드 인코딩과, javascript에서 한글 문자열을 다루는 방식 (1) | 2023.10.19 |
HTTP의 역사: 0.9부터 3.0까지 (1) | 2023.09.14 |