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

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

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

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

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

1.1 創(chuàng)建 Excel 表格

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

function exportExcel(data, filename) {
    const ws_name = "Sheet1"; // 設(shè)置工作表的名稱
    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]);
    }

    // 通過 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ā)下載

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

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

exportExcel(data, "people.xlsx");

這段代碼將會生成一個 people.xlsx 文件,并下載到本地。

1.3 小結(jié)

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

二、讀取 Excel 文件

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

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

可以通過 FileReader API 讀取文件內(nèi)容,并將其轉(zhuǎn)化為一個可以處理的對象。我們使用 XMLHttpRequestFileReader 讀取文件,然后使用 Blob 來轉(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 文件

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

// 假設(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ù)
    });
});

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

2.3 小結(jié)

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

三、總結(jié)

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

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

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

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

相關(guān)文章

  • JS?TypeScript的Map對象及聯(lián)合類型實戰(zhàn)

    JS?TypeScript的Map對象及聯(lián)合類型實戰(zhàn)

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

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

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

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

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

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

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

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

    下面小編就為大家?guī)硪黄斎敕ǖ幕剀嚺c消息發(fā)送快捷鍵回車的沖突解決方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • parabola.js拋物線與加入購物車效果的示例代碼

    parabola.js拋物線與加入購物車效果的示例代碼

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

    返回上一個url并刷新界面的js代碼

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

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

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

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

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

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

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

最新評論

龙南县| 兴国县| 汉源县| 繁昌县| 桦甸市| 武川县| 景宁| 全南县| 大同市| 沂源县| 瓮安县| 仪陇县| 宝兴县| 洛南县| 紫云| 江西省| 渝北区| 随州市| 湖州市| 杭锦旗| 高尔夫| 八宿县| 浮山县| 甘德县| 崇信县| 荔浦县| 浦江县| 陵川县| 新源县| 壶关县| 聂拉木县| 台江县| 惠州市| 西青区| 聂荣县| 定远县| 广水市| 大同县| 通化县| 婺源县| 太康县|