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로 구현된 기본 파서가 있습니다.
두 페이지 모두 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
삭제:
행운을 빈다...
이 됩니다.
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.
})
})
의 에서는,data
data.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를 사용하는 가장 간단한 방법입니다.
서버에서 파일을 읽는 방법을 알고 싶을 때 이 코드가 도움이 될 수 있습니다.
제약사항:
- 파일은 서버(로컬/리모트)에 있어야 합니다.
- 헤더를 설정하거나 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"/>
''에서 엑셀 을 읽었을 때 FileReader
API는 텍스트 파일과 많이 다른 파일 구조에서 유래합니다.
'아예, 예, 예, 예, 예, 예, 예, 예, 예, 예, 예.text
FileReader
API 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 string
FileReader
API.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
'programing' 카테고리의 다른 글
유니코드 문자로 json을 디코딩 및 인코딩하는 PHP (0) | 2023.03.11 |
---|---|
Wordpress에서 현재 페이지 번호 찾기 (0) | 2023.03.11 |
머티리얼 UI 리액트 버튼이 리액트 라우터 돔 링크 역할을 하도록 하는 방법 (0) | 2023.03.11 |
Ajax 요청이 있는 Rail의 플래시를 어떻게 처리합니까? (0) | 2023.03.11 |
Mongoose가 하위 문서 배열 항목에 대한 _id 속성을 만들지 못하도록 합니다. (0) | 2023.03.11 |