Меня немного смущает синтаксис, который вы используете, вы определили ExcelToJSON
как конструктор объекта, но он содержит только один метод, который даже не использует параметр, который был передан либо конструктору, либо метод. onLoad
никогда не выполняется, потому что reader.readAsBinaryString
закомментирован, что является методом, запускающим загрузку файла. Вы пытаетесь захватить xl2json
из parseExcel
, но файл анализируется асинхронно, поэтому вам нужно будет использовать json в onLoad
и сохранить ваш элемент в SharePoint из этого обратного вызова. Затем вы обрабатываете AddItemToSPList
, как если бы он также был конструктором, но это просто функция, поэтому, скорее всего, ничего не будет делать.
У меня нет вашей XLSX
утилиты, поэтому я не могу выполнить код, но это должно работать:
<script>
function parseAndUploadFile(file) {
let reader = new FileReader();
reader.onload = function(e) {
let data = e.target.result; // this code is NOT reached
console.log("data: ", data)
let workbook = XLSX.read(data, { type: 'binary' });
workbook.SheetNames.forEach((sheetName) => {
let XL_row_object = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName]);
let json_object = JSON.stringify(XL_row_object);
//console.log(JSON.parse(json_object))
//$('#jsonData').val(json_object);
if (XL_row_object && XL_row_object.Title && XL_row_object.Location) {
addItemToSPList(XL_row_object.Title, XL_row_object.Location);
} else {
console.log('parsed json does not appear to have necessary values: ')
console.log(XL_row_object);
}
})
} // reader.onload
reader.onerror = function(err) {
console.log(err);
}
reader.readAsBinaryString(files); // tells JS to start reading the file
} // ExcelToJSON
function addItemToSPList(title, location) {
let holidaysColumns = {
"__metadata":{"type": "SP.Data.holidaysListItem"},
"Title": title,
"Location": location
};
let listName = "Test%20Holidays";
return fetch("www.url.com/gc/_api/web/lists/getbytitle('" + listName + "')/items", {
method: "POST",
credentials: 'same-origin',
body: JSON.stringify(holidaysColumns),
headers: {
// etc
}
}).then((response) => {
$(".uploadSuccessFail").html("File was upload successfully.")
console.log(response)
}).catch((err) => {
$(".uploadSuccessFail").html("Error: File upload unsuccessful.")
console.log("Error: " + err);
})
}
function handleFileSelect(evt) {
let files = evt.target.files; // FileList object
if (files.length > 0) {
parseAndUploadFile(files[0]);
}
}
</script>
<script>
document.getElementById('getFile').addEventListener('change', handleFileSelect, false);
</script>