Excel dosyasını okuyabiliyorum, FileReader
ancak metin ve onunla birlikte garip karakterler çıkarıyor. Okumam lazımxls
her sütunda dosya sıra sıra, okunan veri ve JSON dönüştürmek.
Xls dosyası satır satır nasıl okunur?
Excel dosyasını okuyabiliyorum, FileReader
ancak metin ve onunla birlikte garip karakterler çıkarıyor. Okumam lazımxls
her sütunda dosya sıra sıra, okunan veri ve JSON dönüştürmek.
Xls dosyası satır satır nasıl okunur?
Yanıtlar:
Aşağıdaki İşlev, Excel sayfası (XLSX biçimi) verilerini JSON'a dönüştürür. işleve söz ekleyebilirsiniz.
<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>
Aşağıdaki yazıda XLS formatı Excel'den JSON'a javascript kodu var mı?
jszip.js
senaryoyu önceden ilan etmem gerekiyordu xlsx.js
.
Eski soru, ancak XLS dosyalarını javascript'ten ayrıştırmanın genel görevinin sıkıcı ve zor olduğunu ancak imkansız olmadığını belirtmeliyim.
Saf JS'de uygulanan temel ayrıştırıcılarım var:
Her iki sayfa da HTML5 Dosyası API'sine dayalı XLS / XLSX ayrıştırıcılarıdır (dosyanızı sürükleyip bırakabilirsiniz ve hücrelerdeki verileri virgülle ayrılmış bir listede yazdırır). Ayrıca JSON nesneleri de oluşturabilirsiniz (ilk satırın bir başlık satırı olduğu varsayılarak).
Http://oss.sheetjs.com/ test paketi , dosyaları almak ve ayrıştırmak için XHR kullanan bir sürümü gösterir.
excel file
Buraya bir yükleyin ve verileri şu JSON
formatta alabilirsiniz 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>
Bu, aşağıdaki Stackoverflow
gönderilerin bir kombinasyonudur :
İyi şanslar...
Bu kod size yardımcı olabilir
böylece js kodunda xlsx.full.min.js dahil çalışmıyor zaman jszip.js çoğu.
<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]);
};
Bir tarayıcıda * .xlsx dosyasını okumanın en basit ve en küçük yolunu istiyorsanız, bu kitaplık şunları yapabilir:
https://catamphetamine.github.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.
})
})
Yukarıdaki örnekte data
ham dize verileri bulunmaktadır. Bu geçirerek sıkı şema ile JSON çözümlenebilir schema
argüman. Bunun bir örneği için API belgelerine bakın.
API belgeleri: http://npmjs.com/package/read-excel-file
Yukarıdaki cevap için teşekkür ederim, sanırım (cevapların) kapsamı tamamlandı, ancak react kullanan her kimse için bir "tepki yolu" eklemek istiyorum.
İmportData.js adlı bir dosya oluşturun:
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)}/>
);
}
}
Ardından, oluşturma yöntemindeki bileşeni şu şekilde kullanabilirsiniz:
import ImportData from './importData.js';
import React, {Component} from 'react';
class ParentComponent extends Component{
render(){
return (<importData/>);
}
}
<ImportData/>
kendi durumuna verileri belirleyecek şunlara "ana bileşeni" Excel verilerine erişebilir bu :
<ImportData/>
yerine olmalıdır <importData/>
. React konusunda oldukça yeniyim ancak bileşen adlarının her zaman büyük harfle yazıldığına inanıyorum. Her durumda, örnekte içe aktarılırken kullanılan ad budur.
<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>
Bir dosyayı sunucudan nasıl okuyacağınızı merak ediyorsanız, bu kod yardımcı olabilir.
Kısıtlamalar:
<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.js, xlsx.full.min.js, jszip.js'yi dahil edin
dosya girişine bir onchange olay işleyicisi ekleyin
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);
}
XLS, Microsoft tarafından kullanılan ikili tescilli bir biçimdir. XLS'yi sunucu tarafı dilleriyle ayrıştırmak, belirli bir kitaplık veya Office Interop kullanmadan çok zordur. Bunu javascript ile yapmak görev imkansızdır. HTML5 Dosya API'si sayesinde ikili içeriğini okuyabilirsiniz, ancak onu ayrıştırmak ve yorumlamak için XLS formatının özelliklerine dalmanız gerekir . Office 2007'den başlayarak Microsoft , bir standart olan Açık XML dosya biçimlerini ( xslx
Excel için) benimsedi .
var excel = new ActiveXObject ("Excel.Application"); var kitap = excel.Workbooks.Open (your_full_file_name_here.xls); var sayfa = kitap.Sayfa.Item (1); var value = page.Range ("A1");
çarşafın olduğunda. Excel'de yaptığınız gibi VBA işlevlerini kullanabilirsiniz.