Ошибки форматирования данных в файле Excel с использованием htmlHtml

Программисты Html
Ответить
Anonymous
 Ошибки форматирования данных в файле Excel с использованием html

Сообщение Anonymous »

У меня есть этот «временный» файл в формате html для преобразования файла .csv в файл .xlsx, содержащий только те данные, которые мне нужны.

Моя проблема в том, что некоторые даты отформатированы как число, а не как дата.
Я впервые использую этот уровень HTML, большая часть кода сгенерирована GitHub Copilot.
Изображение

Я думаю, проблема здесь, не знаю,

Код: Выделить всё

convertBtn.addEventListener('click', () => {
const file = csvFile.files[0];
if (!file) { msg.textContent = 'Seleziona un file .csv'; return; }
if (!/\.csv$/i.test(file.name)) { msg.textContent = 'Il file selezionato non è .csv'; return; }

msg.textContent = 'Conversione in corso...';
const reader = new FileReader();
reader.onload = (e) => {
try {
const csvText = e.target.result;
const workbook = XLSX.read(csvText, { type: 'string' });
const worksheet = workbook.Sheets[workbook.SheetNames[0]];
const data = XLSX.utils.sheet_to_json(worksheet);

if (data.length > 0) {
const foundColumns = Object.keys(data[0]);
console.log('Colonne trovate nel CSV:', foundColumns);
msg.textContent = 'Debug - Colonne trovate: ' + foundColumns.join(', ');
}

let filteredData = data.map(row => {
const normalizedRow = {};

for (let key in row) {

const normalizedKey = key
.normalize("NFKD")
.replace(/[\u2019\u2018\u0060\u00A0]/g, "'")
.trim();

let englishKey = null;

for (let mapKey in italianToEnglish) {
const normalizedMapKey = mapKey
.normalize("NFKD")
.replace(/[\u2019\u2018\u0060\u00A0]/g, "'")
.trim();

if (normalizedMapKey === normalizedKey) {
englishKey = italianToEnglish[mapKey];
console.log(`Mappato: "${key}" → "${englishKey}"`);
break;
}
}

englishKey = englishKey || key;
normalizedRow[englishKey] = row[key];
}

if (!isNaN(normalizedRow['Activity Date'])) {
const excelDate = parseFloat(normalizedRow['Activity Date']);
const jsDate = new Date(Date.UTC(1899, 11, 30) + excelDate * 86400000);

const day = jsDate.getUTCDate();
const month = jsDate.getUTCMonth() + 1;
const year = jsDate.getUTCFullYear();
normalizedRow['Activity Day'] = `${day}/${month}/${year}`;

const h = jsDate.getUTCHours().toString().padStart(2, '0');
const m = jsDate.getUTCMinutes().toString().padStart(2, '0');
const s = jsDate.getUTCSeconds().toString().padStart(2, '0');
normalizedRow['Activity Starting Hour'] = `${h}:${m}:${s}`;
}

if (normalizedRow['Activity Date'] && !normalizedRow['Activity Day']) {
normalizedRow['Activity Day'] = convertToActivityDay(normalizedRow['Activity Date']);
}

if (normalizedRow['Activity Date'] && !normalizedRow['Activity Starting Hour']) {
const s = String(normalizedRow['Activity Date']);
const timeMatch = s.match(/(\d{1,2}:\d{2}:\d{2})/);
if (timeMatch) {
normalizedRow['Activity Starting Hour'] = timeMatch[1];
}
}

return normalizedRow;
});

console.log('Prima riga dopo normalizzazione:', filteredData[0]);

filteredData = filteredData.map(row => {
const filteredRow = {};
columnsToKeep.forEach(col => {
filteredRow[col] = row[col] || '';
});
return filteredRow;
});

filteredData.sort((a, b) => {
const dateA = parseActivityDay(a['Activity Day'] || '');
const dateB = parseActivityDay(b['Activity Day'] || '');
return dateA - dateB;
});

const newWorksheet = XLSX.utils.json_to_sheet(filteredData, { header: columnsToKeep });

columnsToKeep.forEach((col, colIndex) => {
for (let rowIndex = 1; rowIndex  { URL.revokeObjectURL(url); a.remove(); msg.textContent = 'Convertito: ' + outName + ' (colonne filtrate)'; }, 100);
} catch (err) {
msg.textContent = 'Errore: ' + (err.message || err);
}
};
reader.onerror = () => { msg.textContent = 'Errore nella lettura del file'; };
reader.readAsText(file, 'UTF-8');
});
Здесь вы можете найти мой файл данных и мой код:
ФАЙЛЫ GOOGLE ДИСК

Подробнее здесь: https://stackoverflow.com/questions/798 ... -with-html
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Html»