function handleFile(event) {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = async (e) => {
const data = new Uint8Array(e.target.result);
const wb = XLSX.read(data, {type:'array'});
const sheet = wb.Sheets[wb.SheetNames[0]];
// Читаем как массив массивов (header: 1), чтобы игнорировать отсутствие заголовков
const rows = XLSX.utils.sheet_to_json(sheet, {header: 1});
if(rows.length === 0) return alert("Файл пуст");
document.getElementById('progress-container').style.display = 'block';
document.getElementById('btnLoad').disabled = true;
// Начинаем с 0 строки, так как заголовков нет
for(let i=0; i < rows.length; i++) {
const row = rows[i];
// Берем данные по позиции: 0 - имя, 1 - адрес
const n = row[0] || "Без имени";
const a = row[1];
if(a && a.length > 5) {
const coords = await getCoords(a.toString());
if(coords) {
clients.push({name: n, addr: a, lat: coords.lat, lon: coords.lon});
updateUI();
}
}
const p = Math.round(((i+1)/rows.length)*100);
document.getElementById('progress-bar').style.width = p + '%';
document.getElementById('prog-text').innerText = `Загружаем: ${p}% (${i+1} из ${rows.length})`;
}
document.getElementById('progress-container').style.display = 'none';
document.getElementById('btnLoad').disabled = false;
alert("Готово! Все точки из Липецка на карте.");
};
reader.readAsArrayBuffer(file);
}