엑셀 파일 검수, 직접 만들지 마세요.
저희가 대신 할게요.
서버가 2차로 확인하기 전에, 브라우저에서 1차 검수를 끝내고 넘깁니다.
직접 만들면 생기는 일
엑셀 업로드를 직접 짜면 하나씩 만나는 일들입니다. 82excel은 이미 해결해 두었습니다.
직접 만들면암호 걸린 파일이 "손상된 파일"로 보입니다.
82excel암호를 따로 알아내 "암호가 걸려 있습니다"라고 알려 줍니다.
직접 만들면EUC-KR로 저장된 CSV의 한글이 깨집니다.
82excelUTF-8·UTF-16·EUC-KR을 자동으로 알아냅니다.
직접 만들면옛 .xls 파일은 따로 만들어야 합니다.
82excelxlsx·xls·csv를 같은 함수로 읽습니다.
직접 만들면빈 칸 때문에 열이 밀리고, 맥에서 만든 CSV의 한글 머리글이 어긋납니다.
82excel열 위치를 지키고, 한글 머리글은 NFC로 맞춰 비교합니다.
직접 만들면조작된 파일 하나로 서버가 멈춥니다.
82excel압축 폭탄과 지나치게 큰 파일을 행을 만들기 전에 막습니다.
직접 만들면라이브러리만 수백 KB입니다.
82excelCDN 파일 하나가 gzip 53.3 KB입니다.
직접 만들면날짜 칸이 45321 같은 숫자로 들어옵니다.
82excel엑셀 날짜 숫자(1904 날짜 체계 포함)를 2024-01-05 형태로 바꿉니다.
직접 만들면전화번호·우편번호의 앞자리 0이 사라집니다.
82excel0이 사라진 값을 알아채고, 셀 서식을 텍스트로 바꾸라고 안내합니다.
직접 만들면사업자등록번호의 검증 숫자를 직접 계산해야 합니다.
82excelkr.brn이 자릿수와 검증 숫자를 확인하고 123-45-67890 형태로 맞춥니다.
직접 만들면=HYPERLINK(…) 같은 값이 저장됐다가 다른 사람의 엑셀에서 수식으로 실행됩니다.
82excel수식 인젝션을 잡습니다. -1000이나 +82 10-…처럼 정상인 값은 막지 않습니다.
직접 만들면주민등록번호가 오류 메시지와 로그에 그대로 찍힙니다.
82excel개인정보를 찾아 900101-1****** 처럼 가립니다. 업로드할 데이터는 가리지 않습니다.
1차는 브라우저, 2차는 서버
사용자는 올리기 전에 어느 칸이 왜 틀렸는지 봅니다. 서버는 파일을 다시 열지 않고, 정리된 데이터를 같은 규칙으로 다시 검사합니다.
브라우저 리포트는 힌트입니다. 서버는 반드시 다시 검사해야 합니다. 다른 언어(Java, PHP, Python, C#, Go)의 서버 SDK는 준비 중입니다.한 줄이면 끝
1. CDN 한 줄
<script src="https://cdn.jsdelivr.net/npm/82excel@0.2.0/dist/cdn/82excel.min.js"></script>
대안 주소 https://82excel.com/cdn/v0.2.0/82excel.min.js · 버전 0.2.0
2. 규칙 파일을 주는 <excel-82>
<excel-82 name="excel" required rules="/rules.json" upload="/api/orders"
error-report="xlsx" locale="ko"></excel-82>
3. 서버에서 같은 rules.json으로 validate
import { validate, rulesHash } from '82excel';
app.post('/api/orders', express.json({ limit: '20mb' }), async (req, res) => {
if (req.body.schema?.hash !== await rulesHash(rules)) return res.status(409).end(); // 규칙이 바뀜
const result = validate(req.body.rows, rules); // 같은 rules.json으로 다시 검사
if (!result.ok) return res.status(422).json(result.errors);
await save(result.rows); // 정리된 행
res.json({ saved: result.rows.length });
});
지금 써보기
예시 규칙을 고르고 예시 파일을 넣어 보세요. 파일은 업로드되지 않고 이 브라우저 안에서만 검사합니다.
이 규칙(JSON) 보기
쓰는 방식은 두 가지
1. 함수만 쓰기 (스크립트)
Excel82.check / validate / readRows 를 직접 부릅니다. 화면 없이 결과 객체만 받고, Node에서도 같은 함수가 돕니다.
<script src="https://cdn.jsdelivr.net/npm/82excel@0.2.0/dist/cdn/82excel.min.js"></script>
<input type="file" id="f">
<script>
document.getElementById('f').onchange = async (e) => {
const rules = await (await fetch('/rules.json')).json();
const r = await Excel82.check(e.target.files[0], { ...rules, readRows: true, locale: 'ko' });
console.log(r.ok, r.summary, r.rows);
};
</script>
2. 끌어다 놓는 폼 컴포넌트 <excel-82>
위 검사기가 이 컴포넌트입니다. 요약, 오류 칸 미리보기, 오류 목록 내려받기, 업로드까지 합니다.
<script src="https://cdn.jsdelivr.net/npm/82excel@0.2.0/dist/cdn/82excel.min.js"></script>
<form action="/orders" method="post">
<excel-82 name="excel" required rules="/rules.json" upload="/api/orders"
error-report="xlsx" template-download="xlsx" locale="ko"></excel-82>
<button>제출</button>
</form>
<excel-82> 속성과 이벤트함수 API오류 코드표데모: 업로드 본문과 리포트 보기
규칙 하나로 끝열 형식, 필수·빈칸, 중복, 목록, 정규식, 범위, 행 간 규칙을 순수 JSON 하나에 적습니다. 같은 파일을 서버에서도 씁니다.
값을 정리해서 넘깁니다2024.1.5 → 2024-01-05, 010 1234 5678 → 010-1234-5678, ₩12,000 → 12000.
한국형 검증기사업자등록번호, 법인등록번호, 주민등록번호, 전화번호, 우편번호, 금액. 정상 번호를 거부하지 않도록 만들었습니다.
개인정보 마스킹오류 메시지, 요약, 리포트, 미리보기에는 900101-1****** 처럼 가려서 넣습니다.
가볍습니다CDN 파일 하나가 gzip 53.3 KB입니다. 런타임 의존성은 fflate 하나입니다.
파일은 나가지 않습니다파일은 브라우저 안에서만 읽습니다. 개발자가 upload 속성을 켰을 때만, 개발자의 서버로 보냅니다.
파일 받는 화면에 붙여 보세요.
가입도 키도 필요 없습니다. MIT 라이선스로 회사 사이트도 무료입니다.
시작하기