From 3cd599f56ba9547b8aa4dbd85ffe747df8f9a7a0 Mon Sep 17 00:00:00 2001 From: Nurs Date: Thu, 17 Sep 2026 03:39:07 +0000 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=20=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B5?= =?UTF-8?q?=20Excel=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- excel-editor.html | 17 ++++++++++++++ excel-editor.js | 57 +++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 65 insertions(+), 9 deletions(-) diff --git a/excel-editor.html b/excel-editor.html index 5a17b1e..02f5fa5 100644 --- a/excel-editor.html +++ b/excel-editor.html @@ -295,6 +295,23 @@ + diff --git a/excel-editor.js b/excel-editor.js index 2510a40..9bc2d2a 100644 --- a/excel-editor.js +++ b/excel-editor.js @@ -1,16 +1,26 @@ -const XLSX = window.XLSX; - let mainData = null; let templateData = null; let mainFileName = ''; let templateFileName = ''; let mappedResult = null; +// Проверка загрузки XLSX +function getXLSX() { + if (window.XLSX) return window.XLSX; + alert('Библиотека для работы с Excel ещё не загрузилась. Подождите секунду...'); + return null; +} + // Обработка выбора файла function handleFileSelect(event, type) { + const XLSX = getXLSX(); + if (!XLSX) return; + const file = event.target.files[0]; if (!file) return; + console.log('Файл выбран:', type, file.name, file.size); + const zone = document.getElementById(type + '-upload'); const info = document.getElementById(type + '-file-info'); @@ -20,14 +30,22 @@ function handleFileSelect(event, type) { if (type === 'main') { mainFileName = file.name; readExcel(file, (data) => { + console.log('Основной файл прочитан, строк:', data.length); mainData = data; checkFilesReady(); + }, (error) => { + console.error('Ошибка чтения основного файла:', error); + alert('Ошибка чтения файла: ' + error.message); }); } else { templateFileName = file.name; readExcel(file, (data) => { + console.log('Шаблон прочитан, строк:', data.length); templateData = data; checkFilesReady(); + }, (error) => { + console.error('Ошибка чтения шаблона:', error); + alert('Ошибка чтения файла: ' + error.message); }); } } @@ -38,15 +56,36 @@ function formatFileSize(bytes) { return (bytes / (1024 * 1024)).toFixed(1) + ' МБ'; } -function readExcel(file, callback) { +function readExcel(file, callback, errorCallback) { + const XLSX = window.XLSX; + if (!XLSX) { + if (errorCallback) errorCallback(new Error('Библиотека XLSX не загружена')); + return; + } + + console.log('Чтение файла:', file.name); const reader = new FileReader(); reader.onload = (e) => { - const data = new Uint8Array(e.target.result); - const workbook = XLSX.read(data, { type: 'array' }); - const sheetName = workbook.SheetNames[0]; - const worksheet = workbook.Sheets[sheetName]; - const json = XLSX.utils.sheet_to_json(worksheet); - callback(json); + try { + const data = new Uint8Array(e.target.result); + console.log('Файл загружен в память, байт:', data.length); + const workbook = XLSX.read(data, { type: 'array' }); + console.log('Workbook прочитан, листов:', workbook.SheetNames.length); + const sheetName = workbook.SheetNames[0]; + const worksheet = workbook.Sheets[sheetName]; + const json = XLSX.utils.sheet_to_json(worksheet); + console.log('Данные конвертированы в JSON, строк:', json.length); + callback(json); + } catch (error) { + console.error('Ошибка при чтении Excel:', error); + if (errorCallback) errorCallback(error); + else alert('Ошибка при чтении файла: ' + error.message); + } + }; + reader.onerror = () => { + const error = new Error('Не удалось прочитать файл'); + if (errorCallback) errorCallback(error); + else alert(error.message); }; reader.readAsArrayBuffer(file); }