React+Excel JS에서 Excel 템플릿을 읽고 편집 및 저장

16004 단어 Node.jsReacttech

요약:


이전 Excel 연결에서 준비된 excel 파일을 읽어서 추가 편집과 저장의 예로 사용합니다.
  • excel 파일은 Http를 통해 axios에서 읽은 예입니다.
  • 프로비저닝

  • react 17
  • Exceljs
  • axios
  • 참고 자료

  • 관련 URL
    https://github.com/exceljs/exceljs
  • 출력 예


  • 제목, 고정 문자, 격자, 배경색 등을 읽을 템플릿에 있습니다.미리 설정하다

  • public/temp4.xlsx에 저장합니다.

  • 차리다


    npm install --save exceljs
    npm install --save axios
    

    읽기, 편집 저장

  • axios.get으로 파일 읽기 (type:araybuffer)
  • workbook.xlsx.load에서 Uint 8 Aray
  • 읽기
  • workbook.getWorksheet을 통해 워크시트 이름 지정
  • 편집
  • 보존은 이전과 마찬가지로 Blob로 변경됩니다.출력
  • https://gist.github.com/kuc-arc-f/6ac9ff047dda28a29d4fe67af51bae2f
    xls6.tsx
    /* XLS templete, read */
    import React from 'react'
    const ExcelJS = require('exceljs');
    import axios from 'axios'
    
    interface IProps {
      history:string[],
    }
    //
    class Test extends React.Component<IProps> {
      constructor(props: any) {
        super(props);
        this.state = {data: ''}
      }  
      componentDidMount(){
      }
      async clickHandler(e: any){
    console.log("#clickHandler");
        e.preventDefault();
        const res = await axios.get("/temp4.xlsx", { responseType: "arraybuffer" });
        const data = new Uint8Array(res.data);
        const workbook = new ExcelJS.Workbook();
        await workbook.xlsx.load(data);
        //data
        const items = [
          {id: 1001, name: "みかん", price: 180 },
          {id: 1002, name: "りんご", price: 210 },
          {id: 1003, name: "バナナ", price: 170 },
        ]
    //console.log(items);
        const worksheet = workbook.getWorksheet('sheet1');
        worksheet.pageSetup = {orientation:'portrait'};
        const startRow = 4;
        let iCount = 0;
        let row = worksheet.getRow(1);
        for (const item of items) {
          let pos = startRow + iCount;
          row = worksheet.getRow(pos);
          console.log(item);
          row.getCell(1).value = item.id;
          row.getCell(2).value = item.name;
          row.getCell(3).value = item.price;
          iCount += 1;
        }
        //save
        const uint8Array = await workbook.xlsx.writeBuffer();
    //console.log(uint8Array);
        const blob = new Blob([uint8Array], {type: 'application/octet-binary'});
        const url = window.URL.createObjectURL(blob);
        const a = document.createElement('a');
        a.href = url;
        a.download = `out.xlsx`;
        a.click();
        a.remove()    
      }
      render(){
        return(
        <div >
          <h1>xls6: read templete</h1>
          <hr />
          <button onClick={(e) => this.clickHandler(e)}>Read</button>
        </div>
        )
      }
    }
    export default Test;
    
    

    관련 페이지


    https://zenn.dev/knaka0209/articles/c7427d9ee080d2
    ....

    좋은 웹페이지 즐겨찾기