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

利用純JavaScript實(shí)現(xiàn)讀取和導(dǎo)出Excel文件

 更新時(shí)間:2025年03月19日 11:08:09   作者:Riesenzahn  
在 Web 開(kāi)發(fā)中,導(dǎo)入和導(dǎo)出 Excel 文件是一個(gè)常見(jiàn)的需求,特別是對(duì)于數(shù)據(jù)報(bào)表和分析等場(chǎng)景,雖然有很多第三方庫(kù)(如 xlsx 和 sheetjs)提供了非常強(qiáng)大的功能,但本文將探討如何不依賴(lài)第三方庫(kù),利用純 JavaScript 來(lái)實(shí)現(xiàn)讀取和導(dǎo)出Excel文件,需要的朋友可以參考下

一、導(dǎo)出 Excel 文件

導(dǎo)出 Excel 文件通常涉及將數(shù)據(jù)轉(zhuǎn)化為 Excel 文件格式(如 .xlsx.xls)。在純 JavaScript 中,我們可以通過(guò)手動(dòng)生成一個(gè) Excel 文件的格式化內(nèi)容并下載。

1.1 創(chuàng)建 Excel 表格

Excel 文件通常由多個(gè)工作表(Sheet)構(gòu)成,而每個(gè)工作表中包含一個(gè)表格(Grid)。我們通過(guò)生成表格數(shù)據(jù),并利用 Blob 對(duì)象生成二進(jìn)制數(shù)據(jù),最終下載成 Excel 文件。

function exportExcel(data, filename) {
    const ws_name = "Sheet1"; // 設(shè)置工作表的名稱(chēng)
    const wb = {
        SheetNames: [ws_name],
        Sheets: {}
    };

    // 將二維數(shù)據(jù)數(shù)組轉(zhuǎn)換為 Excel 格式
    const ws_data = [];
    for (let i = 0; i < data.length; i++) {
        ws_data.push(data[i]);
    }

    // 通過(guò) SheetJS 的標(biāo)準(zhǔn)格式進(jìn)行生成
    const ws = XLSX.utils.aoa_to_sheet(ws_data);

    wb.Sheets[ws_name] = ws;

    // 生成文件下載鏈接
    const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'array' });
    const blob = new Blob([wbout], { type: "application/octet-stream" });

    const link = document.createElement('a');
    link.href = URL.createObjectURL(blob);
    link.download = filename || 'export.xlsx';
    link.click();
}

1.2 觸發(fā)下載

上面的代碼段生成了一個(gè)包含數(shù)據(jù)的 Excel 文件,但沒(méi)有直接觸發(fā)下載。通過(guò)創(chuàng)建一個(gè)臨時(shí)的 a 標(biāo)簽,并利用 Blob 對(duì)象來(lái)觸發(fā)文件的下載。

const data = [
    ["Name", "Age", "City"],
    ["Alice", 25, "New York"],
    ["Bob", 30, "San Francisco"],
    ["Charlie", 35, "London"]
];

exportExcel(data, "people.xlsx");

這段代碼將會(huì)生成一個(gè) people.xlsx 文件,并下載到本地。

1.3 小結(jié)

通過(guò)簡(jiǎn)單的 JavaScript,我們可以輕松地將二維數(shù)據(jù)數(shù)組導(dǎo)出為 Excel 文件。生成文件的關(guān)鍵是利用 Blob 對(duì)象進(jìn)行二進(jìn)制數(shù)據(jù)流的處理,以及通過(guò) a 標(biāo)簽觸發(fā)文件下載。

二、讀取 Excel 文件

讀取 Excel 文件并解析內(nèi)容相對(duì)復(fù)雜一些,因?yàn)?Excel 文件本質(zhì)上是二進(jìn)制格式數(shù)據(jù)。雖然沒(méi)有第三方庫(kù)的幫助,我們也可以通過(guò) FileReader API 讀取文件,手動(dòng)解析 Excel 文件中的數(shù)據(jù)。

2.1 讀取 Excel 文件并解析數(shù)據(jù)

可以通過(guò) FileReader API 讀取文件內(nèi)容,并將其轉(zhuǎn)化為一個(gè)可以處理的對(duì)象。我們使用 XMLHttpRequestFileReader 讀取文件,然后使用 Blob 來(lái)轉(zhuǎn)換二進(jìn)制數(shù)據(jù)。

function readExcel(file, callback) {
    const reader = new FileReader();
    
    // 讀取文件內(nèi)容
    reader.onload = function (e) {
        const data = e.target.result;
        
        // 使用 FileReader 解析文件的二進(jìn)制數(shù)據(jù)
        const binaryData = new Uint8Array(data);
        const workbook = XLSX.read(binaryData, { type: 'array' });

        // 獲取工作表的數(shù)據(jù)
        const sheet = workbook.Sheets[workbook.SheetNames[0]];
        const rows = XLSX.utils.sheet_to_json(sheet, { header: 1 });  // 將工作表內(nèi)容轉(zhuǎn)化為二維數(shù)組

        callback(rows);  // 傳遞解析結(jié)果
    };

    reader.readAsArrayBuffer(file);
}

2.2 處理 Excel 文件

通過(guò)上面的代碼,我們可以將讀取的 Excel 文件解析成二維數(shù)組(每一行數(shù)據(jù)為數(shù)組中的一個(gè)子數(shù)組)。然后你可以根據(jù)需求進(jìn)行數(shù)據(jù)展示、存儲(chǔ)或其他操作。

// 假設(shè)文件上傳控件
const input = document.getElementById('file-input');
input.addEventListener('change', function (e) {
    const file = e.target.files[0];
    
    // 調(diào)用 readExcel 函數(shù)
    readExcel(file, function (data) {
        console.log(data);  // 輸出解析后的數(shù)據(jù)
    });
});

這段代碼會(huì)通過(guò)文件上傳控件讀取用戶選擇的 Excel 文件,并解析出文件中的內(nèi)容。最終,解析的數(shù)據(jù)將通過(guò) callback 回調(diào)傳遞給用戶。

2.3 小結(jié)

通過(guò) FileReader API 和 XLSX 庫(kù)(這里假設(shè)使用了相關(guān)工具解析 Excel 文件),可以將 Excel 文件內(nèi)容讀取為一個(gè)可以操作的 JavaScript 對(duì)象或二維數(shù)組。然后,我們就能進(jìn)行后續(xù)的處理,如渲染、分析或存儲(chǔ)。

三、總結(jié)

本文介紹了如何在沒(méi)有第三方庫(kù)的情況下,使用純 JavaScript 來(lái)實(shí)現(xiàn) Excel 文件的導(dǎo)入和導(dǎo)出功能。對(duì)于導(dǎo)出 Excel,我們通過(guò)構(gòu)建 Excel 的二進(jìn)制格式并觸發(fā)下載,達(dá)到了不依賴(lài)外部庫(kù)的目的。而對(duì)于讀取 Excel 文件,我們使用了原生的 FileReader API 來(lái)讀取文件并解析出其內(nèi)容。

雖然沒(méi)有引入第三方庫(kù),純 JS 實(shí)現(xiàn)的讀取和導(dǎo)出 Excel 功能仍然是可行的,但在復(fù)雜場(chǎng)景下,如處理大量數(shù)據(jù)或支持多個(gè) Excel 格式,使用像 XLSX 這類(lèi)專(zhuān)門(mén)的庫(kù)會(huì)更加高效和靈活。

這樣,你可以根據(jù)項(xiàng)目需求決定是否使用外部庫(kù),或者僅依賴(lài)原生 API 來(lái)實(shí)現(xiàn)功能。

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

相關(guān)文章

  • JS?TypeScript的Map對(duì)象及聯(lián)合類(lèi)型實(shí)戰(zhàn)

    JS?TypeScript的Map對(duì)象及聯(lián)合類(lèi)型實(shí)戰(zhàn)

    這篇文章主要介紹了JS?TypeScript的Map對(duì)象及聯(lián)合類(lèi)型實(shí)戰(zhàn),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-08-08
  • Echarts圖表中formatter的基本用法示例

    Echarts圖表中formatter的基本用法示例

    formatter 提示框浮層內(nèi)容格式器,支持字符串模板和回調(diào)函數(shù)兩種形式,下面這篇文章主要給大家介紹了關(guān)于Echarts圖表中formatter的基本用法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • JavaScript之a(chǎn)ppendChild、insertBefore和insertAfter使用說(shuō)明

    JavaScript之a(chǎn)ppendChild、insertBefore和insertAfter使用說(shuō)明

    這幾天需要用到對(duì)HTML節(jié)點(diǎn)元素的刪/插操作,由于用到insertBefore方法的時(shí)候遇到了一些麻煩,現(xiàn)在作為知識(shí)的整理,分別對(duì)appendChild、insertBefore和insertAfter做個(gè)總結(jié)
    2010-12-12
  • 有關(guān)suggest快速刪除后仍然出現(xiàn)下拉列表的bug問(wèn)題

    有關(guān)suggest快速刪除后仍然出現(xiàn)下拉列表的bug問(wèn)題

    寫(xiě)suggest的時(shí)候,有時(shí)我們快速刪除輸入框的文字后,但是suggest下拉列表還有出現(xiàn),導(dǎo)致的原因是因?yàn)閍jax異步請(qǐng)求造成的,下面通過(guò)本文給大家分享下解決方法,感興趣的朋友一起看看
    2016-12-12
  • 輸入法的回車(chē)與消息發(fā)送快捷鍵回車(chē)的沖突解決方法

    輸入法的回車(chē)與消息發(fā)送快捷鍵回車(chē)的沖突解決方法

    下面小編就為大家?guī)?lái)一篇輸入法的回車(chē)與消息發(fā)送快捷鍵回車(chē)的沖突解決方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • parabola.js拋物線與加入購(gòu)物車(chē)效果的示例代碼

    parabola.js拋物線與加入購(gòu)物車(chē)效果的示例代碼

    本篇文章主要介紹了parabola.js拋物線與加入購(gòu)物車(chē)效果的示例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • 返回上一個(gè)url并刷新界面的js代碼

    返回上一個(gè)url并刷新界面的js代碼

    要返回上一頁(yè)再刷新頁(yè)面我們用到最多的是在像php,asp,jsp,asp.net中,下面我來(lái)給大家先介紹js 返回前一頁(yè)并刷新頁(yè)面,然后再把這些代碼放在php中實(shí)現(xiàn)刪除后返回當(dāng)前頁(yè)面并刷新頁(yè)面
    2020-09-09
  • 分享經(jīng)典的JavaScript開(kāi)發(fā)技巧

    分享經(jīng)典的JavaScript開(kāi)發(fā)技巧

    這篇文章向大家分享了40多個(gè)經(jīng)典的JavaScript開(kāi)發(fā)技巧,相信讀完這篇文章對(duì)大家開(kāi)發(fā)javascript有很大的幫助作用,感興趣的小伙伴們可以參考一下
    2015-11-11
  • javascript中的數(shù)據(jù)類(lèi)型檢測(cè)方法詳解

    javascript中的數(shù)據(jù)類(lèi)型檢測(cè)方法詳解

    這篇文章主要介紹了javascript中的數(shù)據(jù)類(lèi)型檢測(cè)方法,結(jié)合實(shí)例形式分析了javascript數(shù)據(jù)類(lèi)型并總結(jié)分析了常見(jiàn)的數(shù)據(jù)類(lèi)型檢測(cè)操作技巧,需要的朋友可以參考下
    2019-08-08
  • JS數(shù)組去重常用方法實(shí)例小結(jié)【4種方法】

    JS數(shù)組去重常用方法實(shí)例小結(jié)【4種方法】

    這篇文章主要介紹了JS數(shù)組去重常用方法,結(jié)合實(shí)例形式總結(jié)分析了4種常用的數(shù)據(jù)去重實(shí)現(xiàn)方法,涉及javascript數(shù)組的遍歷、判斷、追加等相關(guān)操作技巧,需要的朋友可以參考下
    2018-05-05

最新評(píng)論

白水县| 高阳县| 玛多县| 铜鼓县| 宜宾县| 榕江县| 西峡县| 东港市| 称多县| 中西区| 应城市| 阿鲁科尔沁旗| 涿鹿县| 同德县| 政和县| 万州区| 临江市| 江山市| 贵州省| 轮台县| 佛学| 民权县| 青阳县| 迭部县| 汉川市| 手机| 高邮市| 梨树县| 石狮市| 安义县| 新乡市| 夏津县| 永吉县| 巫溪县| 花莲县| 绥阳县| 奈曼旗| 黄龙县| 咸丰县| 晋城| 同德县|