/*
리액트 파일업로드 기본소스
액셀업로드가 있다면 event.target.value 부분을 초기화 하면 같은 이름의 파일 재업로드 가능해짐
*/
import React, { useState } from 'react';
import * as XLSX from 'xlsx';
const ExcelUpload: React.FC = () => {
const [excelData, setExcelData] = useState<any[]>([]);
const handleFileUpload = (event: React.ChangeEvent<HTMLInputElement>) => {
// event: React.ChangeEvent ==> 엑셀업로드 파일명이 다른 경우에만 적용 (안에 내용이 바뀌어도 적용이 인식이 안됨)
const file = event.target.files?.[0];
if (file) {
const reader = new FileReader();
reader.onload = (e) => {
const data = new Uint8Array(e.target?.result as ArrayBuffer);
const workbook = XLSX.read(data, { type: 'array' });
// 첫 번째 시트를 가져와서 JSON으로 변환
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 });
setExcelData(jsonData);
};
reader.readAsArrayBuffer(file);
}
event.target.value = '' ; //같은 파일 명 재업로드를 위해서 초기화
};
return (
<div>
<h1>엑셀 파일 업로드</h1>
<input type="file" accept=".xlsx, .xls" onChange={handleFileUpload} />
{/* 엑셀 데이터를 테이블 형태로 표시 */}
{excelData.length > 0 && (
<table>
<tbody>
{excelData.map((row, rowIndex) => (
<tr key={rowIndex}>
{row.map((cell: any, cellIndex: number) => (
<td key={cellIndex}>{cell}</td>
))}
</tr>
))}
</tbody>
</table>
)}
</div>
);
};
export default ExcelUpload;
'프로그램 > React-Native' 카테고리의 다른 글
react의 for 대신 사용하는 .forEach 에서 validation (0) | 2024.11.28 |
---|---|
리액트 년월 차이 계산 자바스크립트 (0) | 2024.10.17 |
Missing "key" prop for element in iterator react/jsx-key (1) | 2024.09.14 |
nameSearch 에러 recognize the nameSearch prop on a DOM element (1) | 2024.09.11 |
date.isValid is not a function (1) | 2024.09.06 |