最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出為Excel和CSV文件

 更新時間:2025年05月06日 11:12:58   作者:Enti7c  
在 Web 開發(fā)中,經(jīng)常會遇到需要將數(shù)據(jù)導(dǎo)出為文件的需求,這篇文章主要為大家詳細(xì)介紹了如何使用JavaScript實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出為Excel和CSV文件,需要的可以了解下

在 Web 開發(fā)中,經(jīng)常會遇到需要將數(shù)據(jù)導(dǎo)出為文件的需求,例如將數(shù)據(jù)導(dǎo)出為 Excel 或 CSV 文件。今天,我們就來探討如何使用 JavaScript 實(shí)現(xiàn)這一功能。

一、實(shí)現(xiàn)思路

我們通過 HTML 創(chuàng)建一個按鈕,點(diǎn)擊按鈕時,觸發(fā) JavaScript 函數(shù),將數(shù)據(jù)轉(zhuǎn)換為 Excel 或 CSV 文件格式,并生成可下載的鏈接。

效果圖:

二、代碼實(shí)現(xiàn)

HTML 部分

<!DOCTYPE html>
<html>
 
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <script src="js/jquery-3.7.1.min.js"></script>
    <title></title>
    <style>
        .content {
            width: 300px;
            display: flex;
            justify-content: space-around;
        }
 
        .inport {
            background-color: skyblue;
            width: 100px;
            font-weight: 600;
            font-size: 20px;
        }
 
        .inport:hover {
            background-color: azure;
            cursor: pointer;
        }
    </style>
</head>
 
<body>
    <div class="content">
        <h1>導(dǎo)出數(shù)據(jù):</h1>
        <button class="inport">一鍵導(dǎo)出</button>
    </div>
    <script>
        // 具體實(shí)現(xiàn)代碼在下方
    </script>
</body>
 
</html>

在這個 HTML 結(jié)構(gòu)中,我們定義了一個按鈕,用于觸發(fā)數(shù)據(jù)導(dǎo)出操作,并設(shè)置了相應(yīng)的樣式。

JavaScript 部分

$('.inport').click(function () {
    // 假設(shè)這是從接口獲取的數(shù)據(jù)
    const jsonData = [{
            name: '張三',
            tel: 15836333325,
            email: '1903333356@qq.com'
        },
        {
            name: '李四',
            tel: 15833338325,
            email: '19033333@qq.com'
        },
        {
            name: '測試',
            tel: 158333333325,
            email: '測試.com'
        }
    ];
 
    // 導(dǎo)出為Excel文件
    // 列標(biāo)題
    let str = '<tr><td align="center">姓名</td><td>電話</td><td align="center">郵箱</td></tr>';
    // 循環(huán)遍歷,每行加入tr標(biāo)簽,每個單元格加td標(biāo)簽
    for (let i = 0; i < jsonData.length; i++) {
        str += '<tr>';
        for (const key in jsonData[i]) {
            // 增加\t為了不讓表格顯示科學(xué)計數(shù)法或者其他格式
            str += `<td>${jsonData[i][key] + '\t'}</td>`;
        }
        str += '</tr>';
    }
 
    const worksheet = 'Sheet1'; // Worksheet名
    const uri = 'data:application/vnd.ms-excel;base64,';
    // 輸出base64編碼
    const base64 = (s) => window.btoa(unescape(encodeURIComponent(s)));
 
    // 下載的表格模板數(shù)據(jù)
    const template = `<html xmlns:o="urn:schemas-microsoft-com:office:office" 
            xmlns:x="urn:schemas-microsoft-com:office:excel" 
            xmlns="http://www.w3.org/TR/REC-html40">
            <head>
            <meta http-equiv="Conten-Type" content="text/html;charset=utf-8">
            <!--[if gte mso 9]>
            <xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet>
            <x:Name>${worksheet}</x:Name>
            <x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions>
            </x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml>
            <![endif]--></head>
            <body><table cellpadding="100">${str}</table></body>
        </html>`;
 
    // 獲取當(dāng)前日期
    const now = new Date();
    const year = now.getFullYear();
    const month = String(now.getMonth() + 1).padStart(2, '0');
    const day = String(now.getDate()).padStart(2, '0');
    const dateString = `${year}-${month}-${day}`;
 
    const link = document.createElement("a");
    link.href = uri + base64(template); //下載模板
    // 添加日期到文件名
    link.download = `數(shù)據(jù)表_${dateString}.xls`;
    link.click();
 
    // 導(dǎo)出為CSV文件
    // 列標(biāo)題,逗號隔開,每一個逗號就是隔開一個單元格
    let str = `姓名,電話,郵箱\n`;
 
    for (let i = 0; i < jsonData.length; i++) {
        for (const key in jsonData[i]) {
            str += `(${jsonData[i][key] + '\t'},`;     // 增加\t為了不讓表格顯示科學(xué)計數(shù)法或者其他格式
        }
        str += '\n';
    }
 
    const uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str); // encodeURIComponent解決中文亂碼
 
    const link = document.createElement("a"); // 通過創(chuàng)建a標(biāo)簽實(shí)現(xiàn)
    link.href = uri;
    // 添加日期到文件名
    link.download = `json數(shù)據(jù)表_${dateString}.csv`;
    link.click();
});

在上述 JavaScript 代碼中,我們首先定義了要導(dǎo)出的數(shù)據(jù)jsonData。然后分別實(shí)現(xiàn)了將數(shù)據(jù)導(dǎo)出為 Excel 和 CSV 文件的功能。

對于 Excel 文件,我們構(gòu)建了一個 HTML 表格模板,將數(shù)據(jù)填充到表格中,然后將其轉(zhuǎn)換為 Base64 編碼,生成可下載的鏈接。

對于 CSV 文件,我們將數(shù)據(jù)按照 CSV 格式拼接成字符串,進(jìn)行編碼后生成可下載的鏈接。

三、總結(jié)

通過以上代碼,我們實(shí)現(xiàn)了在 Web 頁面中點(diǎn)擊按鈕將數(shù)據(jù)導(dǎo)出為 Excel 和 CSV 文件的功能。在實(shí)際應(yīng)用中,我們可以根據(jù)具體需求對數(shù)據(jù)格式和文件名稱進(jìn)行調(diào)整,以滿足不同的業(yè)務(wù)場景。

到此這篇關(guān)于JavaScript實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出為Excel和CSV文件的文章就介紹到這了,更多相關(guān)JavaScript數(shù)據(jù)導(dǎo)出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js?面向?qū)ο髮W(xué)習(xí)筆記

    js?面向?qū)ο髮W(xué)習(xí)筆記

    這篇文章主要介紹了js?面向?qū)ο?需要的朋友可以參考下
    2023-05-05
  • javascript 節(jié)點(diǎn)排序 2

    javascript 節(jié)點(diǎn)排序 2

    對支持sourceIndex的HTML文檔的節(jié)點(diǎn)重排,使用JK提供的思路,速度至少比單純使用nodes.sort(function(a,b){return a.sourceIndex - b.sourceIndex})這種方式快兩倍
    2011-01-01
  • Javascript for in的缺陷總結(jié)

    Javascript for in的缺陷總結(jié)

    這篇文章主要介紹了Javascript for in的缺陷總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 向fckeditor編輯器插入指定代碼的方法

    向fckeditor編輯器插入指定代碼的方法

    這篇文章主要向大家分享如何在fckeditor編輯器插入代碼操作,這里腳本之家小編就為大家分享一下啊
    2007-05-05
  • JavaScript網(wǎng)頁定位詳解

    JavaScript網(wǎng)頁定位詳解

    本篇文章主要是對JavaScript網(wǎng)頁定位進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-01-01
  • 網(wǎng)站接入QQ登錄的兩種方法

    網(wǎng)站接入QQ登錄的兩種方法

    網(wǎng)站接入QQ登錄,首先引入授權(quán)js文件,這個需要提交申請的,通過之后按照下面的步驟進(jìn)行操作就可以了
    2014-07-07
  • 詳解微信小程序?qū)崿F(xiàn)仿微信聊天界面(各種細(xì)節(jié)處理)

    詳解微信小程序?qū)崿F(xiàn)仿微信聊天界面(各種細(xì)節(jié)處理)

    這篇文章主要介紹了詳解微信小程序?qū)崿F(xiàn)仿微信聊天界面(各種細(xì)節(jié)處理),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • JavaScript無阻塞加載和defer、async詳解

    JavaScript無阻塞加載和defer、async詳解

    JS具有阻塞特性,當(dāng)瀏覽器在執(zhí)行js代碼時,不能同時做其它事情,所有瀏覽器在下載JS的時候,會阻止一切其他活動,比如其他資源的下載,內(nèi)容的呈現(xiàn)等等。至到JS下載、解析、執(zhí)行完畢后才開始繼續(xù)并行下載其他資源并呈現(xiàn)內(nèi)容。
    2017-02-02
  • 基于replaceChild制作簡單的吞噬特效

    基于replaceChild制作簡單的吞噬特效

    本篇文章通過js和css結(jié)合實(shí)現(xiàn)簡單的吞噬效果,代碼簡單易懂,需要的朋友可以參考下本文
    2015-09-09
  • 簡單的郵箱登陸的提示效果類似于yahoo郵箱

    簡單的郵箱登陸的提示效果類似于yahoo郵箱

    類似于yahoo郵箱登陸的提示效果,當(dāng)鼠標(biāo)聚焦到郵箱地址文本框時,文本框文字被清空
    2014-02-02

最新評論

博野县| 江陵县| 罗平县| 琼海市| 延安市| 弋阳县| 东台市| 连江县| 雷山县| 昭苏县| 洮南市| 金华市| 德州市| 万安县| 依兰县| 辉南县| 册亨县| 新龙县| 社会| 泰和县| 南皮县| 陈巴尔虎旗| 鄢陵县| 陇南市| 清苑县| 大同市| 多伦县| 丽江市| 元江| 龙胜| 深圳市| 宁乡县| 开远市| 洛南县| 井陉县| 江陵县| 屏东市| 八宿县| 新巴尔虎右旗| 石城县| 吉木乃县|