Исправлена обработка ошибок при загрузке Excel файлов

This commit is contained in:
Nurs 2026-09-17 03:39:07 +00:00
parent cd32645377
commit 3cd599f56b
2 changed files with 65 additions and 9 deletions

View File

@ -295,6 +295,23 @@
</footer>
<script src="https://cdn.sheetjs.com/xlsx-0.20.1/package/dist/xlsx.full.min.js"></script>
<script>
// Проверка загрузки библиотеки
window.addEventListener('DOMContentLoaded', function() {
console.log('DOM загружен');
if (window.XLSX) {
console.log('SheetJS версии:', XLSX.version);
} else {
console.error('SheetJS НЕ загружен!');
document.getElementById('upload-section').innerHTML =
'<div class="kt-ai-card" style="padding: var(--kt-ai-space-5); text-align: center; background: var(--kt-ai-danger-bg);">' +
'<h3>Ошибка загрузки библиотеки</h3>' +
'<p>Не удалось загрузить библиотеку для работы с Excel.</p>' +
'<p>Проверьте подключение к интернету или обновите страницу.</p>' +
'</div>';
}
});
</script>
<script src="excel-editor.js"></script>
</body>
</html>

View File

@ -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) => {
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);
}