From 1a0a0d832d4379eb86b2b2e43edbea25b1c1222d Mon Sep 17 00:00:00 2001 From: lc <brokenway@163.com> Date: Thu, 20 Feb 2025 00:55:18 +0000 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=2012313.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 12313.html | 374 ++++++++++++++++++++++++++--------------------------- 1 file changed, 187 insertions(+), 187 deletions(-) diff --git a/12313.html b/12313.html index a1c5edc..4a1905a 100644 --- a/12313.html +++ b/12313.html @@ -1,188 +1,188 @@ -<!DOCTYPE html> -<html lang="zh-CN"> -<head> - <meta charset="UTF-8"> - <meta name="viewport" content="width=device-width, initial-scale=1.0"> - <title>Excel 数据处理工具</title> - <link href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/css/bootstrap.min.css" rel="stylesheet"> - <style> - body { - padding: 20px; - } - .progress-container { - position: relative; - width: 100%; - height: 20px; - background-color: #f3f3f3; - border-radius: 10px; - overflow: hidden; - margin-top: 10px; - } - .progress-bar { - height: 100%; - width: 0; - background-color: #4caf50; - border-radius: 10px; - transition: width 0.3s ease-in-out; - } - .progress-text { - position: absolute; - top: 0; - left: 50%; - transform: translateX(-50%); - font-size: 14px; - color: #333; - line-height: 20px; - font-weight: bold; - white-space: nowrap; - } - </style> -</head> -<body> - <div class="container"> - <h1 class="text-center">Excel 数据处理工具</h1> - <div class="row"> - <div class="col-md-6 offset-md-3"> - <div class="form-group"> - <label for="fileInput">上传Excel或CSV文件</label> - <input type="file" class="form-control-file" id="fileInput" accept=".xlsx, .xls, .csv"> - </div> - <div class="form-group"> - <label for="sheetSelect">选择工作表</label> - <select class="form-control" id="sheetSelect"></select> - </div> - <button class="btn btn-primary" id="processButton">处理数据</button> - <div class="progress-container"> - <div class="progress-bar" id="progress-bar"></div> - <span class="progress-text" id="progress-text">0%</span> - </div> - </div> - </div> - </div> - - <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> - <script> - document.addEventListener('DOMContentLoaded', function() { - const fileInput = document.getElementById('fileInput'); - const sheetSelect = document.getElementById('sheetSelect'); - const processButton = document.getElementById('processButton'); - const progressBar = document.getElementById('progress-bar'); - const progressText = document.getElementById('progress-text'); - - fileInput.addEventListener('change', function(event) { - const file = event.target.files[0]; - if (file) { - const reader = new FileReader(); - reader.onload = function(e) { - const data = e.target.result; - const workbook = XLSX.read(data, { type: 'binary' }); - sheetSelect.innerHTML = ''; - workbook.SheetNames.forEach(sheetName => { - const option = document.createElement('option'); - option.value = sheetName; - option.text = sheetName; - sheetSelect.appendChild(option); - }); - processButton.disabled = false; - }; - reader.readAsBinaryString(file); - } - }); - - processButton.addEventListener('click', function() { - const file = fileInput.files[0]; - const sheetName = sheetSelect.value; - const reader = new FileReader(); - reader.onload = function(e) { - const data = e.target.result; - const workbook = XLSX.read(data, { type: 'binary' }); - const worksheet = workbook.Sheets[sheetName]; - const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); - - // 定义需要导出的列号 - const colList = [2, 5, 6, 7, 8, 9, 11, 12, 13, 16, 18, 19, 20, 22, 27, 28, 29, 30, 31, 40, 51]; - const insertProvince = "陕西省"; - const insertCity = "宝鸡市"; - - // 处理数据 - const processedData = []; - const headers = jsonData[0]; // 获取表头 - const newHeaders = []; - - headers.forEach((header, colIndex) => { - if (colList.includes(colIndex + 1)) { - if (colIndex + 1 === 16) { - // 拆分第16列标题 - newHeaders.push(header + "1"); - newHeaders.push(header + "2"); - newHeaders.push(header + "3"); - } else if (colIndex + 1 === 18) { - // 在“问题区域”列前插入两列 - newHeaders.push("省"); - newHeaders.push("市"); - newHeaders.push(header); - } else { - newHeaders.push(header); - } - } - }); - - processedData.push(newHeaders); // 添加新的表头 - - const totalRows = jsonData.length - 1; // 总行数(不包括表头) - let processedRows = 0; - - jsonData.slice(1).forEach((row) => { - const newRow = []; - colList.forEach((colIndex) => { - if (colIndex === 16) { - // 拆分第16列数据 - const splitData = (row[colIndex - 1] || '').split('-'); - // 确保拆分后的单元格数量固定为3,不足部分用空字符串填充 - const paddedSplitData = splitData.concat(new Array(3 - splitData.length).fill('')); - newRow.push(...paddedSplitData); - } else if (colIndex === 18) { - // 在“问题区域”列前插入两列 - newRow.push(insertProvince); - newRow.push(insertCity); - newRow.push(row[colIndex - 1]); - } else if (colIndex === 9 || colIndex === 27) { - // 处理第9列和第27列(日期时间列),确保导出时保持日期时间格式 - if (typeof row[colIndex - 1] === 'number') { - const date = new Date(Math.round((row[colIndex - 1] - 25569) * 86400000)); // 转换为JavaScript日期 - newRow.push(date.toISOString().split('T')[0] + ' ' + date.toTimeString().split(' ')[0]); - } else { - newRow.push(row[colIndex - 1]); - } - } else { - // 替换特定内容 - newRow.push(row[colIndex - 1] === "陕西省12313分中心" ? "12313" : row[colIndex - 1]); - } - }); - processedData.push(newRow); - - // 更新进度条 - processedRows++; - const percentage = Math.round((processedRows / totalRows) * 100); - progressBar.style.width = `${percentage}%`; - progressText.textContent = `${percentage}%`; - }); - - // 创建新的工作簿并添加处理后的数据 - const newWorksheet = XLSX.utils.aoa_to_sheet(processedData); - const newWorkbook = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(newWorkbook, newWorksheet, 'ProcessedData'); - - // 保存文件 - XLSX.writeFile(newWorkbook, 'ProcessedData.xlsx'); - - // 更新进度条为100%完成 - progressBar.style.width = '100%'; - progressText.textContent = '100% 完成'; - }; - reader.readAsBinaryString(file); - }); - }); - </script> -</body> +<!DOCTYPE html> +<html lang="zh-CN"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>Excel 数据处理工具</title> + <link href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.2/dist/css/bootstrap.min.css" rel="stylesheet"> + <style> + body { + padding: 20px; + } + .progress-container { + position: relative; + width: 100%; + height: 20px; + background-color: #f3f3f3; + border-radius: 10px; + overflow: hidden; + margin-top: 10px; + } + .progress-bar { + height: 100%; + width: 0; + background-color: #4caf50; + border-radius: 10px; + transition: width 0.3s ease-in-out; + } + .progress-text { + position: absolute; + top: 0; + left: 50%; + transform: translateX(-50%); + font-size: 14px; + color: #333; + line-height: 20px; + font-weight: bold; + white-space: nowrap; + } + </style> +</head> +<body> + <div class="container"> + <h1 class="text-center">Excel 数据处理工具</h1> + <div class="row"> + <div class="col-md-6 offset-md-3"> + <div class="form-group"> + <label for="fileInput">上传Excel或CSV文件</label> + <input type="file" class="form-control-file" id="fileInput" accept=".xlsx, .xls, .csv"> + </div> + <div class="form-group"> + <label for="sheetSelect">选择工作表</label> + <select class="form-control" id="sheetSelect"></select> + </div> + <button class="btn btn-primary" id="processButton">处理数据</button> + <div class="progress-container"> + <div class="progress-bar" id="progress-bar"></div> + <span class="progress-text" id="progress-text">0%</span> + </div> + </div> + </div> + </div> + + <script src="https://unpkg.com/xlsx/dist/xlsx.full.min.js"></script> + <script> + document.addEventListener('DOMContentLoaded', function() { + const fileInput = document.getElementById('fileInput'); + const sheetSelect = document.getElementById('sheetSelect'); + const processButton = document.getElementById('processButton'); + const progressBar = document.getElementById('progress-bar'); + const progressText = document.getElementById('progress-text'); + + fileInput.addEventListener('change', function(event) { + const file = event.target.files[0]; + if (file) { + const reader = new FileReader(); + reader.onload = function(e) { + const data = e.target.result; + const workbook = XLSX.read(data, { type: 'binary' }); + sheetSelect.innerHTML = ''; + workbook.SheetNames.forEach(sheetName => { + const option = document.createElement('option'); + option.value = sheetName; + option.text = sheetName; + sheetSelect.appendChild(option); + }); + processButton.disabled = false; + }; + reader.readAsBinaryString(file); + } + }); + + processButton.addEventListener('click', function() { + const file = fileInput.files[0]; + const sheetName = sheetSelect.value; + const reader = new FileReader(); + reader.onload = function(e) { + const data = e.target.result; + const workbook = XLSX.read(data, { type: 'binary' }); + const worksheet = workbook.Sheets[sheetName]; + const jsonData = XLSX.utils.sheet_to_json(worksheet, { header: 1 }); + + // 定义需要导出的列号 + const colList = [2, 5, 6, 7, 8, 9, 11, 12, 13, 16, 18, 19, 20, 22, 27, 28, 29, 30, 31, 40, 51]; + const insertProvince = "陕西省"; + const insertCity = "宝鸡市"; + + // 处理数据 + const processedData = []; + const headers = jsonData[0]; // 获取表头 + const newHeaders = []; + + headers.forEach((header, colIndex) => { + if (colList.includes(colIndex + 1)) { + if (colIndex + 1 === 16) { + // 拆分第16列标题 + newHeaders.push(header + "1"); + newHeaders.push(header + "2"); + newHeaders.push(header + "3"); + } else if (colIndex + 1 === 18) { + // 在“问题区域”列前插入两列 + newHeaders.push("省"); + newHeaders.push("市"); + newHeaders.push(header); + } else { + newHeaders.push(header); + } + } + }); + + processedData.push(newHeaders); // 添加新的表头 + + const totalRows = jsonData.length - 1; // 总行数(不包括表头) + let processedRows = 0; + + jsonData.slice(1).forEach((row) => { + const newRow = []; + colList.forEach((colIndex) => { + if (colIndex === 16) { + // 拆分第16列数据 + const splitData = (row[colIndex - 1] || '').split('-'); + // 确保拆分后的单元格数量固定为3,不足部分用空字符串填充 + const paddedSplitData = splitData.concat(new Array(3 - splitData.length).fill('')); + newRow.push(...paddedSplitData); + } else if (colIndex === 18) { + // 在“问题区域”列前插入两列 + newRow.push(insertProvince); + newRow.push(insertCity); + newRow.push(row[colIndex - 1]); + } else if (colIndex === 9 || colIndex === 27) { + // 处理第9列和第27列(日期时间列),确保导出时保持日期时间格式 + if (typeof row[colIndex - 1] === 'number') { + const date = new Date(Math.round((row[colIndex - 1] - 25569) * 86400000)); // 转换为JavaScript日期 + newRow.push(date.toISOString().split('T')[0] + ' ' + date.toTimeString().split(' ')[0]); + } else { + newRow.push(row[colIndex - 1]); + } + } else { + // 替换特定内容 + newRow.push(row[colIndex - 1] === "陕西省12313分中心" ? "12313" : row[colIndex - 1]); + } + }); + processedData.push(newRow); + + // 更新进度条 + processedRows++; + const percentage = Math.round((processedRows / totalRows) * 100); + progressBar.style.width = `${percentage}%`; + progressText.textContent = `${percentage}%`; + }); + + // 创建新的工作簿并添加处理后的数据 + const newWorksheet = XLSX.utils.aoa_to_sheet(processedData); + const newWorkbook = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(newWorkbook, newWorksheet, 'ProcessedData'); + + // 保存文件 + XLSX.writeFile(newWorkbook, 'ProcessedData.xlsx'); + + // 更新进度条为100%完成 + progressBar.style.width = '100%'; + progressText.textContent = '100% 完成'; + }; + reader.readAsBinaryString(file); + }); + }); + </script> +</body> </html> \ No newline at end of file