티스토리 뷰
클라이언트에서 엑셀 다운로드? 이 모듈 하나면 충분합니다 – client-excel-module 소개
프론트엔드를 하다 보면 엑셀 다운로드 기능은 정말 자주 등장하는 요구사항 중 하나입니다.
특히 관리자 페이지나 통계 페이지를 만들다 보면 엑셀로 내보내기는 거의 필수죠.
보통은 Java + POI 조합?
백엔드가 Java라면 대부분 Apache POI를 사용해서 엑셀을 생성합니다. 강력하긴 하지만…
- 설정 복잡하고,
- 러닝 커브도 제법 있고,
- 결국 서버 API를 만들어야 하니 관리 포인트가 늘어나고…
이런 경험, 다들 한 번쯤 해봤을 거예요. 특히 작은 기능을 위해 백엔드까지 건드리는 건 꽤 비효율적이죠.
클라이언트에서 바로 엑셀을?
그래서 프론트에서 직접 엑셀을 만들 수 있으면 좋겠다고 생각하게 됩니다.
그때 보통 가장 먼저 떠오르는 게 바로 SheetJS (xlsx.js).
정말 유명하고, 기능도 많지만…
- 멀티헤더 처리할 때 삽질,
- 워크시트 여러 개 만들기 번거로움,
- 스타일 적용은 거의 불가능하거나 귀찮고,
- 업로드 처리도 직접 구현해야 함
하다 보면 결국 “이걸 내가 다 짜야 하나…?” 싶은 순간이 옵니다.
그래서 찾은 가벼운 대안: client-excel-module
최근에 정말 괜찮은 모듈 하나를 발견했습니다. 이름은 client-excel-module.
SheetJS 기반으로 만들었고 기능을 훨씬 간단하고, 가볍고, 실용적인 기능에 집중된 모듈이에요.
★ npm: https://www.npmjs.com/package/client-excel-module
☆ github: https://github.com/decompanyio/client-excel-module
어떤 점이 좋았냐면
- 기본 엑셀 다운로드 기능이 매우 간단
- 멀티 헤더도 쉽게 처리 가능
- 워크시트 여러 개도 만들 수 있음
- 타입스크립트 기반이라 타입도 친절하게 제공
- 한국 개발자가 만든 모듈이라 한국 환경에 잘 맞는 사용성
- 앞으로도 기능이 계속 추가될 예정 (컨트리뷰터로도 참여 중!)
사용 예시 (간단하게!)
import { downloadExcel } from 'client-excel-module'
downloadExcel({
filename: '샘플_엑셀',
sheets: [
{
name: '첫번째 시트',
headers: ['이름', '나이', '이메일'],
data: [
['홍길동', 30, 'hong@example.com'],
['김철수', 28, 'kim@example.com'],
],
},
],
})
이 정도면 충분하죠.
복잡한 설정이나 스타일링 없이도 바로 엑셀 파일 생성이 가능합니다.
지금도 컨트리뷰터로 참여 중!
직접 이슈를 열면, 빠르게 피드백도 주시고 개발도 진행 예정.
지금도 컬럼 스타일이라든가, 날짜 포맷 등 추가 기능을 논의하고 있고요. 머지 기능까지도!?
마무리하며
SheetJS도 좋지만, “기본적인 엑셀 다운로드 기능만 빠르게 구현하고 싶다”는 경우엔
client-excel-module이 진짜 추천입니다.
- 백엔드 작업 필요 없음
- 코드 깔끔함
- 프론트에서 필요한 핵심 기능에 집중
관리자 페이지 만들고 있거나, 엑셀 기능 때문에 고민 중이라면 꼭 한 번 써보세요.
실제로 현재 관리자 페이지에 적용해서 사용 중.
아래는 리액트 프로젝트에서 컴포넌트화 해서 사용하는 로직 입니다.
import { downloadExcel, ExcelCellStyle } from 'client-excel-module'
import { PiMicrosoftExcelLogoFill } from 'react-icons/pi'
// 참고: https://github.com/decompanyio/client-excel-module
type ExcelDownalodProps = {
sheetsData: any
filename?: string
type?: 'xlsx' | 'xls' | 'csv' | 'txt'
styleOptions?: {
headerStyle?: ExcelCellStyle
bodyStyle?: ExcelCellStyle
}
multiHeadersMap?: Record<string, string[][]>
}
const ExcelDownload = ({
sheetsData,
filename = 'excel',
type = 'xlsx',
styleOptions,
multiHeadersMap,
}: ExcelDownalodProps) => {
const exceldownloadHandler = () => {
downloadExcel({
sheetsData,
filename,
type,
styleOptions,
multiHeadersMap,
})
}
return (
<PiMicrosoftExcelLogoFill
style={{ cursor: 'pointer', color: '#217346' }}
size={30}
onClick={exceldownloadHandler}
/>
)
}
export default ExcelDownload
실제 d.ts 를 까보면 아래와 같이 주석, 코드가 정리가 잘 되어있어서 한 눈에 확인 가능.
+ 업로드도 지원되어서 한 번 사용해보시는 것도 추천드립니다.
'개발.. > Node' 카테고리의 다른 글
레거시 프론트엔드 프로젝트 버전 업데이트 진행 (0) | 2024.08.26 |
---|---|
Nodejs, sharp 이미지 리사이즈시 이미지가 돌아가는 현상 (0) | 2023.09.20 |
nodejs 에서 openai embedding 및 코사인 유사도 사용 (0) | 2023.08.21 |
Nodejs, Sharp 를 이용한 이미지 최적화 (Webp 변환) (0) | 2023.08.16 |
npkill (0) | 2023.03.31 |
- Total
- Today
- Yesterday
- 서버 to 서버
- 스벨트
- vue router
- nextjs14
- 오블완
- nuxt2
- ChatGPT
- cors
- React
- github
- Vite
- vscode
- 타입스크립트
- seo
- NUXT
- AWS
- Zustand
- 깃허브
- Github Actions
- Git
- nextjs15
- openAI
- nodejs
- nextjs13
- svelte
- 티스토리챌린지
- NextJS
- vue composition api
- 네이버 서치 어드바이저
- dockerfile
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |