programing

Javascript/HTML5에서 Excel(XLS) 파일을 해석하는 방법

yellowcard 2023. 3. 11. 08:48
반응형

Javascript/HTML5에서 Excel(XLS) 파일을 해석하는 방법

via via via via via via via via via via via via via via via via via via via via .FileReader문자도 출력하고 이상한 문자도 출력합니다. 돼요.xls단위로 을 작성하여 모든 합니다.

xls 파일을 한 줄씩 읽는 방법

아래 함수에서 Excel 시트(XLSX 형식) 데이터를 JSON으로 변환하며, 함수에 약속을 추가할 수 있습니다.

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
<script>
var ExcelToJSON = function() {

  this.parseExcel = function(file) {
    var reader = new FileReader();

    reader.onload = function(e) {
      var data = e.target.result;
      var workbook = XLSX.read(data, {
        type: 'binary'
      });

      workbook.SheetNames.forEach(function(sheetName) {
        // Here is your object
        var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
        var json_object = JSON.stringify(XL_row_object);
        console.log(json_object);

      })

    };

    reader.onerror = function(ex) {
      console.log(ex);
    };

    reader.readAsBinaryString(file);
  };
};
</script>

아래 게시물은 Excel to JSON javascript code의 XLS 포맷 코드를 가지고 있습니까?

오래된 질문입니다만, Javascript에서 XLS 파일을 해석하는 일반적인 작업은 지루하고 어렵지만 불가능한 것은 아닙니다.

순수 JS로 구현된 기본 파서가 있습니다.

  • http://oss.sheetjs.com/js-xls/ (XLS 파일, 필요한 것)
  • http://oss.sheetjs.com/js-xlsx/ (XLSX/XLSM/XLSB 파일)

두 페이지 모두 HTML5 File API 기반의 XLS/XLSX 파서입니다(파일을 드래그 드롭하면 쉼표로 구분된 목록으로 셀의 데이터가 출력됩니다).JSON 오브젝트를 생성할 수도 있습니다(첫 번째 행이 헤더 행이라고 가정).

테스트 스위트 http://oss.sheetjs.com/에는 XHR을 사용하여 파일을 가져오고 해석하는 버전이 나와 있습니다.

excel file 수 .JSON로 in in로 console:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
<script>
  var ExcelToJSON = function() {

    this.parseExcel = function(file) {
      var reader = new FileReader();

      reader.onload = function(e) {
        var data = e.target.result;
        var workbook = XLSX.read(data, {
          type: 'binary'
        });
        workbook.SheetNames.forEach(function(sheetName) {
          // Here is your object
          var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
          var json_object = JSON.stringify(XL_row_object);
          console.log(JSON.parse(json_object));
          jQuery('#xlx_json').val(json_object);
        })
      };

      reader.onerror = function(ex) {
        console.log(ex);
      };

      reader.readAsBinaryString(file);
    };
  };

  function handleFileSelect(evt) {

    var files = evt.target.files; // FileList object
    var xl2json = new ExcelToJSON();
    xl2json.parseExcel(files[0]);
  }
</script>

<form enctype="multipart/form-data">
  <input id="upload" type=file name="files[]">
</form>

<textarea class="form-control" rows=35 cols=120 id="xlx_json"></textarea>

<script>
  document.getElementById('upload').addEventListener('change', handleFileSelect, false);
</script>

은 다음과 입니다.Stackoverflow 삭제:

  1. https://stackoverflow.com/a/37083658/4742733
  2. https://stackoverflow.com/a/39515846/4742733

행운을 빈다...

이 됩니다.
jszip.는 xlsx.full.min.js입니다.

HTML 코드

 <input type="file" id="file" ng-model="csvFile"  
    onchange="angular.element(this).scope().ExcelExport(event)"/>

자바스크립트

<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js">
</script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.10.8/xlsx.full.min.js">
</script>

$scope.ExcelExport= function (event) {


    var input = event.target;
    var reader = new FileReader();
    reader.onload = function(){
        var fileData = reader.result;
        var wb = XLSX.read(fileData, {type : 'binary'});

        wb.SheetNames.forEach(function(sheetName){
        var rowObj =XLSX.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);
        var jsonObj = JSON.stringify(rowObj);
        console.log(jsonObj)
        })
    };
    reader.readAsBinaryString(input.files[0]);
    };

브라우저에서 *.xlsx 파일을 읽는 가장 간단하고 간단한 방법을 원하는 경우 이 라이브러리는 다음을 수행할 수 있습니다.

https://catamphetamine.gitlab.io/read-excel-file/

<input type="file" id="input" />
import readXlsxFile from 'read-excel-file'

const input = document.getElementById('input')

input.addEventListener('change', () => {
  readXlsxFile(input.files[0]).then((data) => {
    // `data` is an array of rows
    // each row being an array of cells.
  })
})

의 에서는,datadata.raw 입니다.JSON을 할 수 .schema해 주십시오.API API입니다.

API 문서: http://npmjs.com/package/read-excel-file

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/jszip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.8.0/xlsx.js"></script>
<script>
    var ExcelToJSON = function() {

      this.parseExcel = function(file) {
        var reader = new FileReader();

        reader.onload = function(e) {
          var data = e.target.result;
          var workbook = XLSX.read(data, {
            type: 'binary'
          });
          workbook.SheetNames.forEach(function(sheetName) {
            // Here is your object
            var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);
            var json_object = JSON.stringify(XL_row_object);
            console.log(JSON.parse(json_object));
            jQuery( '#xlx_json' ).val( json_object );
          })
        };

        reader.onerror = function(ex) {
          console.log(ex);
        };

        reader.readAsBinaryString(file);
      };
  };

  function handleFileSelect(evt) {
    
    var files = evt.target.files; // FileList object
    var xl2json = new ExcelToJSON();
    xl2json.parseExcel(files[0]);
  }


 
</script>

<form enctype="multipart/form-data">
    <input id="upload" type=file  name="files[]">
</form>

    <textarea class="form-control" rows=35 cols=120 id="xlx_json"></textarea>

    <script>
        document.getElementById('upload').addEventListener('change', handleFileSelect, false);

    </script>

위의 답변 감사합니다. (답변 범위)는 완성되었다고 생각합니다만, 사용하고 있는 분에게는 「리액션 방법」을 추가하고 싶습니다.

importData.js라는 파일을 만듭니다.

import React, {Component} from 'react';
import XLSX from 'xlsx';
export default class ImportData extends Component{
    constructor(props){
        super(props);
        this.state={
            excelData:{}
        }
    }
    excelToJson(reader){
        var fileData = reader.result;
        var wb = XLSX.read(fileData, {type : 'binary'});
        var data = {};
        wb.SheetNames.forEach(function(sheetName){
             var rowObj =XLSX.utils.sheet_to_row_object_array(wb.Sheets[sheetName]);
             var rowString = JSON.stringify(rowObj);
             data[sheetName] = rowString;
        });
        this.setState({excelData: data});
    }
    loadFileXLSX(event){
        var input = event.target;
        var reader = new FileReader();
        reader.onload = this.excelToJson.bind(this,reader);
        reader.readAsBinaryString(input.files[0]);
    }
    render(){
        return (
            <input type="file" onChange={this.loadFileXLSX.bind(this)}/>
        );
    }
}

그런 다음 다음과 같이 렌더링 방법으로 구성요소를 사용할 수 있습니다.

import ImportData from './importData.js';
import React, {Component} from 'react';
class ParentComponent extends Component{
    render(){
        return (<ImportData/>);
    }
}

<ImportData/>는 데이터를 자체 상태로 설정합니다.이것에 의해, 「부모 컴포넌트」의 Excel 데이터에 액세스 할 수 있습니다.

readExcelFile = async ( file ) =>
{

    const fileReader = new FileReader();
    fileReader.readAsArrayBuffer( file );

    fileReader.onload = ( e ) =>
    {
        const bufferArray = e.target.result;

        const wb = XLSX.read( bufferArray, { type: "buffer" } );

        const wsname = wb.SheetNames[ 0 ];

        const ws = wb.Sheets[ wsname ];

        const data = XLSX.utils.sheet_to_json( ws );
        console.log(data);
    };

};
            <input type="file" name="excelfile" id="excelfile"  readExcelFile(file)>

CDN과 플레인 Javascript를 사용하여 가장 간단한 방법

<script src="https://unpkg.com/read-excel-file@5.x/bundle/read-excel-file.min.js"></script>
<html>
    <h1>read-excel-file</h1>
</html>
<script>
    var input = document.createElement("INPUT");
    input.setAttribute("type", "file");
    document.body.appendChild(input)
    input.addEventListener('change', function() {
    readXlsxFile(input.files[0]).then(function(rows) {
        console.log(rows)
    })
})
</script>

플레인 javascript를 사용하는 가장 간단한 방법입니다.

서버에서 파일을 읽는 방법을 알고 싶을 때 이 코드가 도움이 될 수 있습니다.

제약사항:

  1. 파일은 서버(로컬/리모트)에 있어야 합니다.
  2. 헤더를 설정하거나 CORS 구글 플러그인을 사용해야 합니다.

<Head>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script lang="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.12.4/xlsx.core.min.js"></script>
</head>

<body>
    <script>
    /* set up XMLHttpRequest */


    // replace it with your file path in local server
    var url = "http://localhost/test.xlsx";

    var oReq = new XMLHttpRequest();
    oReq.open("GET", url, true);
    oReq.responseType = "arraybuffer";

    oReq.onload = function(e) {
        var arraybuffer = oReq.response;

        /* convert data to binary string */
        var data = new Uint8Array(arraybuffer);

        var arr = new Array();
        for (var i = 0; i != data.length; ++i) {
            arr[i] = String.fromCharCode(data[i]);
        }

        var bstr = arr.join("");

        var cfb = XLSX.read(bstr, { type: 'binary' });

        cfb.SheetNames.forEach(function(sheetName, index) {

            // Obtain The Current Row As CSV
            var fieldsObjs = XLS.utils.sheet_to_json(cfb.Sheets[sheetName]);

            fieldsObjs.map(function(field) {
                $("#my_file_output").append('<input type="checkbox" value="' + field.Fields + '">' + field.Fields + '<br>');
            });

        });
    }

    oReq.send();
    </script>
</body>
<div id="my_file_output">
</div>

</html>

xslx.displays, xlsx.full.min.displays, jszip.displays를 포함합니다.

파일 입력에 변경 이벤트 핸들러 추가

function showDataExcel(event)
{
            var file = event.target.files[0];
            var reader = new FileReader();
            var excelData = [];
            reader.onload = function (event) {
                var data = event.target.result;
                var workbook = XLSX.read(data, {
                    type: 'binary'
                });

                workbook.SheetNames.forEach(function (sheetName) {
                    // Here is your object
                    var XL_row_object = XLSX.utils.sheet_to_row_object_array(workbook.Sheets[sheetName]);

                    for (var i = 0; i < XL_row_object.length; i++)
                    {
                        excelData.push(XL_row_object[i]["your column name"]);

                    }

                    var json_object = JSON.stringify(XL_row_object);
                    console.log(json_object);
                    alert(excelData);
                })

            };

            reader.onerror = function (ex) {
                console.log(ex);
            };

            reader.readAsBinaryString(file);

}

이것은 반응 js에 대한 것입니다.

import React, { useState } from "react";
import logo from "./logo.svg";
import "./App.css";
import * as XLSX from "xlsx";

function App() {
  const [items, setItems] = useState([]);

  const readExcel = (file) => {
    const promise = new Promise((resolve, reject) => {
      const fileReader = new FileReader();
      fileReader.readAsArrayBuffer(file);

      fileReader.onload = (e) => {
        const bufferArray = e.target.result;

        const wb = XLSX.read(bufferArray, { type: "buffer" });

        const wsname = wb.SheetNames[0];

        const ws = wb.Sheets[wsname];

        const data = XLSX.utils.sheet_to_json(ws);

        resolve(data);
      };

      fileReader.onerror = (error) => {
        reject(error);
      };
    });

    promise.then((d) => {
      setItems(d);
    });
  };

  return (
    <div>
      <input
        type="file"
        onChange={(e) => {
          const file = e.target.files[0];
          readExcel(file);
        }}
      />

      <table class="table container">
        <thead>
          <tr>
            <th scope="col">Item</th>
            <th scope="col">Description</th>
          </tr>
        </thead>
        <tbody>
          {items.map((d) => (
            <tr key={d.Item}>
              <th>{d.Item}</th>
              <td>{d.Description}</td>
            </tr>
          ))}
        </tbody>
      </table>
    </div>
  );
}

export default App;

아래 코드는 Javascript를 사용하여 XLSX 파일을 읽을 때 작동합니다.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.7.7/xlsx.core.min.js"></script>

<script>

function handleFile(e)
{
    //Get the files from Upload control
    var files = e.target.files;
    var i, f;

    var title;
    var choice;

    //Loop through files
    for (i = 0, f = files[i]; i != files.length; ++i)
    {
        var reader = new FileReader();
        var name = f.name;
        reader.onload = function(e)
        {
            debugger;
            var data = e.target.result;

            var result;
            var workbook = XLSX.read(data,
            {
                type: 'binary'
            });

            var sheet_name_list = workbook.SheetNames;
            var roa;
            sheet_name_list.forEach(function(y)
            {
                /* iterate through sheets */
                //Convert the cell value to Json
                roa = XLSX.utils.sheet_to_json(workbook.Sheets[y]);
                if (roa.length > 0)
                {
                    result = roa;
                }
            });
        };
        reader.readAsArrayBuffer(f);
    }
}

$(document).ready(function()
{
    $('#files').change(handleFile);
});

</script>
<input type="file" id="files" name="files"/>

''에서 엑셀 을 읽었을 때 FileReaderAPI는 텍스트 파일과 많이 다른 파일 구조에서 유래합니다.

'아예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예.textFileReaderAPI werdes werdes 。

할 수 것은 '할 수 있습니다」라고 하는 것입니다.FileReader 수 API입니다.binary string.
에서, 그 로그를 ,binary string위드캐릭터도 받을 수 있어요

하려면 , 그 내용을 .binary string데이터를 추출합니다.이것은, SheetJs 를 사용하면 간단하게 실시할 수 있습니다.

import { read, writeFileXLSX, utils } from "https://cdn.sheetjs.com/xlsx-0.18.7/package/xlsx.mjs";

const workbook = read(data, {
       type:'binary',
});

data는 는 입니다.binary string을 Excel로 합니다.binary stringFileReaderAPI.API.

workbook는 파일의 모든 데이터를 포함하는 개체입니다.

workbook.Sheets 수 있습니다.sheets파일 안에 있습니다.

workbook.Sheets.sheet1 첫 사연에 대한 을 볼 수 .sheet파일을 표시합니다.

는 모두 ""에서 온 입니다.{key:value}discloss.discloss.

sheet 하는 입니다.object array는 wich의 하고 있습니다.sheet헤더의 첫 번째 셀부터 마지막 셀까지 데이터를 포함합니다.
에는 이와 같은 .'A1','B250','J3'

에는 이러한 더 .'!margin' ★★★★★★★★★★★★★★★★★」'!ref':
'!margin'세포 마진을 의미하기 때문에 관심을 나타내지 않을 수 있습니다.
'!ref'는 데이터를 되어 있어 더 롭습니다.데이터는 입니다.string
'A1:J215'줄의 양이나 마지막 열의 글자를 얻을 수 있습니다.

더 자세한 정보가 필요한 경우 시트를 확인하십시오.JS 문서와 여기에 좀 더 자세한 예가 있습니다: 클라이언트 측에서 엑셀 파일 내용을 읽는 방법?


Import에서 이 html 이러한 .tags<script type="module" defer> ... </script>

여기 이 방법을 테스트할 수 있는 코드펜이 있습니다.가장 기본적인 방법밖에 없어요.시트를 사용하여 동일한 작업을 수행하는 몇 가지 간단한 방법이 있습니다.JSutils sheet내용을 다른 형식으로 변경합니다.

XLS는 Microsoft가 사용하는 바이너리 전용 형식입니다.특정 라이브러리나 Office Interop을 사용하지 않고 서버 측 언어를 사용하여 XLS를 해석하는 것은 매우 어렵습니다.javascript를 사용하여 이 작업을 수행하는 것은 불가능합니다.HTML5 File API 덕분에 바이너리 내용을 읽을 수 있지만 해석 및 해석하려면 XLS 포맷의 사양을 자세히 살펴봐야 합니다.Office 2007부터 Microsoft는 Open XML 파일 형식을 도입했습니다.xslx(Excel) ( ( ( ( ( ( ( ( ( ( ( ( ( ( (?

var excel=new ActiveXObject("Excel")응용 프로그램"; var book=varbook.문제집.(your_full_file_name_here.xls)를 엽니다.var sheet=book.Sheets.Item(1); var value=sheet.범위("A1");

시트가 있을 때요엑셀에서처럼 VBA 기능을 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/8238407/how-to-parse-excel-xls-file-in-javascript-html5

반응형