SheetJS Uncaught Ошибка: не удается получить доступ к файлу
Я пытаюсь прочитать файл XLSX одной ячейки данных. но я получаю сообщение об ошибке "Uncaught Error: не удается получить доступ к файлу"
Uncaught Error: Cannot access file Hinnapakkumine.xlsx
at V (xlsx.full.min.js:12)
at qv (xlsx.full.min.js:22)
at Object.eg (xlsx.full.min.js:22)
at HTMLButtonElement.document.getElementById.onclick (Javascript.js:28)
Мой последний пример - заменить одно значение ячейки на переменную hind, и смысл этого кода - получить данные контактной формы после нажатия кнопки и отредактировать файл Excel с этими данными. Почему я получаю эту ошибку и как ее решить?
document.getElementById("saatmisnuppKontakt").onclick = function() {
var laius = document.getElementById("laiusKontakt").value;
var pikkus = document.getElementById("pikkusKontakt").value;
var kõrgus = document.getElementById("korgusKontakt").value;
var hind = 0;
if (pikkus * laius >= 100){
hind = pikkus * laius * 85;
}else if (100 < pikkus * laius <= 200 ){
hind = pikkus * laius * 77;
}else if (200 < pikkus * laius <= 1000 ){
hind = pikkus * laius * 75;
}else if (1000 < pikkus * laius <= 2000 ){
hind = pikkus * laius * 80;
}else if (2000 < pikkus * laius <= 4000) {
hind = pikkus * laius * 85;
}
if (3 <= kõrgus <= 6){
hind *= 1;
}else if(kõrgus == 7){
hind *= 1.1;
}else if (kõrgus == 8){
hind *= 1.2;
}else if (kõrgus == 9) {
hind *= 1.3;
}
var workbook = XLSX.readFile('Hinnapakkumine.xlsx');
/* DO SOMETHING WITH workbook HERE */
var first_sheet_name = workbook.SheetNames[0];
var address_of_cell = 'G18';
/* Get worksheet */
var worksheet = workbook.Sheets[first_sheet_name];
/* Find desired cell */
var desired_cell = worksheet[address_of_cell];
/* Get the value */
var desired_value = (desired_cell ? desired_cell.v : undefined);
window.alert(desired_value);
};
3 ответа
К сожалению, вы не можете использовать readFile в браузере:
readFile доступен только в серверных средах. Браузеры не имеют API для чтения произвольных файлов по заданному пути, поэтому необходимо использовать другую стратегию.
Чтобы увеличить ответ @Sstenn, вам нужно сделать что-то вроде этого
// Optionally await on all of these asynchronous calls
// These promises resolve to the workbook or undefined
// Fetch the file from a server via a url
const workbook = await fetch(fileURL)
// Take the response and turn the data into an array buffer
.then(resp => resp.arrayBuffer())
// User XLSX's read method to ingest the buffer and return the workbook
.then(buff => XLSX.read(buff))
// Be good and handle errors better than this
// Or at least handle them in the downstream logic
.catch(err => console.error(err))
Я исправил почти ту же проблему с помощьюFileReader
.
Если файл находится на устройстве клиента, вы можете прочитать его с помощьюXLSX.read()
как в примере ниже:
loadExcelFile(file: File): Promise {
return new Promise(resolve => {
const reader = new FileReader();
let result = {};
reader.onload = (e) => {
const data = e.target.result
const workbook = XLSX.read(data, {type: "binary"})
workbook.SheetNames.forEach(sheetName => {
result[sheetName] = XLSX.utils.sheet_to_json(workbook.Sheets[sheetName])
})
resolve(result)
}
reader.readAsBinaryString(file)
})
}
Обратите внимание, что единственным параметром функции являетсяFile
объект, который вы можете получить из события ввода (e.target.files
).