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).

Другие вопросы по тегам