You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现HTML表格自动刷新?无需手动加载文件更新数据

实现HTML表格自动更新XLSX数据的方案

我做了一个HTML页面,原本设计加载CSV文件(数据已整理成表格)来重建页面表格,每天得手动加载文件更新数据;现在代码改成加载XLSX文件了。想知道怎么不用手动操作,实现表格自动更新?以下是我的代码:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width,initial=1.0">
    <title>Pricelist</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.18.5/xlsx.full.min.js" integrity="sha512-r22gChDnGvBylk90+2e/ycr3RVrDi8DIOkIGNhJlKfuyQM4tIRAI062MaV8sfjQKYVGjOBaZBOA87z+IhZE9DA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
</head>

<body>
<div class="table"></div>
<script>
    let table = document.querySelector(".table");
    (
        async()=>{
            let workbook = XLSX.read(await(await fetch("./excel/ProdottiEstero0707.xlsx")).arrayBuffer());
            console.log(workbook);
            let worksheet = workbook.SheetNames;
            worksheet.forEach(name=>{
                let html = XLSX.utils.sheet_to_html(workbook.Sheets[name]);
                table.innerHTML +=  `
                <img src="atomiclogo02.png" width=50 height=50/> &nbsp <h3 style="display: inline-block;">Pricelist 07/07/2023</h3><br>${html}`
            })
        }
    )()
</script>
</body>

</html>

可行的自动更新方案

1. 固定文件名+定时刷新(最简单的方案)

如果能把每日更新的XLSX文件统一命名(比如固定叫ProdottiEstero.xlsx,替换掉带日期的文件名),可以用两种方式实现自动更新:

方式A:页面全局定时刷新

在<head>标签里添加一行代码,设置页面每隔指定时间自动刷新(示例为1小时刷新一次,可自行调整):

<meta http-equiv="refresh" content="3600">

页面每到时间就会重新加载,自动拉取最新的同名XLSX文件。

方式B:局部刷新表格(体验更好)

不用刷新整个页面,只定时更新表格内容,同时解决标题里日期固定的问题:

<script>
    let table = document.querySelector(".table");

    // 封装加载数据的核心函数
    async function loadExcelData() {
        // 加时间戳避免浏览器缓存旧文件
        const fileUrl = `./excel/ProdottiEstero.xlsx?t=${Date.now()}`;
        let workbook = XLSX.read(await(await fetch(fileUrl)).arrayBuffer());
        let worksheet = workbook.SheetNames;
        
        // 先清空原有内容,避免重复叠加
        table.innerHTML = '';
        
        worksheet.forEach(name=>{
            let html = XLSX.utils.sheet_to_html(workbook.Sheets[name]);
            // 动态生成当前日期的标题
            const today = new Date().toLocaleDateString('it-IT'); // 生成类似07/07/2023的格式
            table.innerHTML +=  `
            <img src="atomiclogo02.png" width=50 height=50/> &nbsp <h3 style="display: inline-block;">Pricelist ${today}</h3><br>${html}`
        })
    }

    // 页面加载完成先执行一次
    loadExcelData();
    // 每1小时执行一次(3600000毫秒),可根据需求调整间隔
    setInterval(loadExcelData, 3600000);
</script>

2. 保留带日期的文件名,自动识别最新文件

如果必须保留带日期的命名规则(比如ProdottiEstero0707.xlsx),需要服务器配合允许访问文件目录,前端可以请求目录列表后筛选最新文件:

// 获取目录下最新的XLSX文件
async function getLatestExcelFile() {
    const dirResponse = await fetch("./excel/");
    const dirHtml = await dirResponse.text();
    // 匹配所有符合命名规则的XLSX文件
    const fileNames = dirHtml.match(/ProdottiEstero\d{4}\.xlsx/g) || [];
    // 按文件名排序(日期数字越大越靠前)
    fileNames.sort((a,b) => b.localeCompare(a));
    // 返回最新文件路径,没有的话用默认文件
    return fileNames[0] ? `./excel/${fileNames[0]}?t=${Date.now()}` : "./excel/ProdottiEstero0707.xlsx";
}

// 修改加载函数,先获取最新文件再加载
async function loadExcelData() {
    const latestFile = await getLatestExcelFile();
    let workbook = XLSX.read(await(await fetch(latestFile)).arrayBuffer());
    // 后续表格生成逻辑和之前一致...
}

// 初始化+定时执行
loadExcelData();
setInterval(loadExcelData, 3600000);

关键注意事项

  • 一定要加时间戳参数(?t=${Date.now()}),避免浏览器缓存旧的XLSX文件,导致更新不生效。
  • 如果是跨域环境,需要服务器配置CORS允许前端请求文件。
  • 定时间隔可以根据实际更新频率调整,比如每天凌晨更新数据,就设置在凌晨后定时刷新一次即可,不用频繁请求。

内容的提问来源于stack exchange,提问作者Silvia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 12:35:07