Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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 31
Tags more
Archives
Today
Total
관리 메뉴

Memento

[Nextjs] xlsx 엑셀 파일 비밀번호 적용 본문

Study/Nextjs

[Nextjs] xlsx 엑셀 파일 비밀번호 적용

벚꽃손님 2024. 4. 9. 07:23

xlsx 엑셀 파일에 비밀번호를 적용하는 방안은 여러가지일 수 있다.

 

첫번째, https://sheetjs.com/ 를 통해 사용할 수 있다.

2년 동안 갱신이 없는데도 주간 다운로드 수를 보면 200만씩 다운로드 되는 것을 보면 일반적으로 활용하기 좋은 라이브러리인 것 같다.

하지만 비밀번호를 적용하려면 유료 pricing 정책으로 잡혀져 있고, 개인 개발자라 연락이 되는건지 의문이다.

(https://git.sheetjs.com/sheetjs/sheetjs/issues 에서 답변하는 것 보면 활동을 하는것 같긴하다.)

 

두번째, 엑셀 파일을 만들고 zip으로 압축하여 zip에 비밀번호를 적용한다.

통상적인 우회방안으로 많이 사용되는 방법이다.

하지만 근래에 windows11 최신 업데이트를 통해 chrome에서 비밀번호를 설정한 zip 파일을 "바이러스 발견"으로 오탐하는 이슈가 발생하였다.

 

세번재, https://github.com/dtjohnson/xlsx-populate 를 통해 사용할 수 있는 방법이 있는데,

엑셀 파일 자체에 비밀번호를 설정할 때, encrypt하는 퍼포먼스가 굉장히 떨어진다는 글을 봤었다.

개발 자체도 4년 동안 갱신되지 않아 이 방법도 쓰지 않을 거지만, 동작이 되긴 한다. ㅠ_ㅠ)

 

nextjs 환경에서 api로 호출하도록 하였다.

import { NextApiRequest, NextApiResponse } from 'next'
import XlsxPopulate from 'xlsx-populate'

export default async function handler(req: NextApiRequest, res: NextApiResponse) {
  try {
    await XlsxPopulate.fromBlankAsync().then(workbook => {
      // Modify the workbook.
      workbook.sheet('Sheet1').cell('A1').value('This is neat!')

      // Write to file.
      workbook.toFileAsync('./out.xlsx', { password: 'test' })
    })

    res.status(200)
  } catch (error) {
    return res.status(error.status || 500).end(error.message)
  }
}

 

api 호출하면 out.xlsx 파일이 생성되고 아래의 사진처럼 비밀번호를 입력받도록 된다.

 

'Study > Nextjs' 카테고리의 다른 글

[Nextjs14] Routing 용어 정리  (0) 2023.11.24