JavaScript實(shí)現(xiàn)導(dǎo)入和導(dǎo)出Excel的示例詳解
前言
在現(xiàn)代的Web應(yīng)用開發(fā)中,與Excel文件的導(dǎo)入和導(dǎo)出成為了一項(xiàng)常見而重要的任務(wù)。無論是數(shù)據(jù)交換、報(bào)告生成還是數(shù)據(jù)分析,與Excel文件的交互都扮演著至關(guān)重要的角色。本文小編將為大家介紹如何在熟悉的電子表格 UI 中輕松導(dǎo)入 Excel 文件,并以編程方式修改表格或允許用戶進(jìn)行編輯,最后使用葡萄城公司的純前端表格控件SpreadJS組件它們導(dǎo)出回 Excel 文件。
我們將按照以下步驟介紹如何在 JavaScript 中導(dǎo)入/導(dǎo)出到 Excel:
- 搭建 JavaScript 電子表格項(xiàng)目
- 編寫 Excel 導(dǎo)入代碼并導(dǎo)入 Excel
- 將數(shù)據(jù)添加到導(dǎo)入的 Excel 文件
- 為表格添加迷你圖
- 編寫 Excel 導(dǎo)出代碼并導(dǎo)出 Excel
操作步驟
1)搭建 JavaScript 電子表格項(xiàng)目
首先,我們可以使用 NPM 來下載 SpreadJS 文件??梢允褂靡韵碌拿钚衼戆惭b SpreadJS:
npm i @grapecity-software/spread-sheets @grapecity-software/spread-sheets-io file-saver jquery
安裝完之后,我們可以在一個(gè)簡(jiǎn)單的 HTML 文件中添加對(duì)這些腳本和 CSS 文件的引用,如下所示:
<!DOCTYPE html> <html> <head> <title>SpreadJS Import and Export Xlsx</title> <script src="./node_modules/jquery/dist/jquery.min.js" type="text/javascript" ></script> <script src="./node_modules/file-saver/src/FileSaver.js" type="text/javascript" ></script> <link href="./node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css" rel="external nofollow" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="./node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" ></script> <script type="text/javascript" src="./node_modules/@mescius/spread-sheets-io/dist/gc.spread.sheets.io.min.js" ></script> </head> <body> <div id="ss" style="height:600px; width :100%; "></div> </body> </html>
然后我們可以在頁面中添加一個(gè)腳本來初始化 SpreadJS Workbook 組件和一個(gè) div 元素來作為容器:
<script type="text/javascript"> $(document).ready(function () { var workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); }); </script> </head> <body> <div id="ss" style="height:600px ; width :100%; "></div> </body>
2)編寫 Excel 導(dǎo)入代碼并導(dǎo)入 Excel
我們需要添加一個(gè) input 元素和一個(gè) button 來選擇 Excel 文件。
<body> <div id="ss" style="height:700px; width:100%;"></div> <input type="file" id="selectedFile" name="files[]" accept=".xlsx" /> <button class="settingButton" id="open">Open</button> </body>
然后我們需要使用 spread.import() 方法來導(dǎo)入 Excel 文件。我們將在按鈕的點(diǎn)擊事件中導(dǎo)入用戶選擇的本地文件。
document.getElementById("open").onclick = function () { var file = document.querySelector("#selectedFile").files[0]; if (!file) { return; } workbook.import(file); };
現(xiàn)在就可以在 JavaScript 電子表格組件中導(dǎo)入和查看 Excel (.xlsx) 文件了,如下所示:
3)將數(shù)據(jù)添加到導(dǎo)入的 Excel 文件
在這里,我們將使用 利潤(rùn)損失表.xlsx 作為模板,如下圖所示:
現(xiàn)在我們需要添加一個(gè)按鈕來將數(shù)據(jù)添加到導(dǎo)入的 Excel 文件中。
<button id="addRevenue">Add Revenue</button>
可以為該按鈕的點(diǎn)擊事件編寫一個(gè)函數(shù)來為表格添加一行并復(fù)制前一行的樣式,為接下來添加數(shù)據(jù)做準(zhǔn)備。要復(fù)制樣式,我們需要使用 copyTo() 函數(shù)并傳入:
- 起始和目標(biāo)行索引和列索引
- 復(fù)制的行數(shù)和列數(shù)
- 復(fù)制模式 CopyToOptions 值
document.getElementById("addRevenue").onclick = function () {var sheet = workbook.getActiveSheet(); sheet.addRows(newRowIndex, 1); sheet.copyTo(10,1, newRowIndex,1,1,29,GC.Spread.Sheets.CopyToOptions.style ); };
下面是用于添加數(shù)據(jù)和迷你圖的代碼。對(duì)于大多數(shù)數(shù)據(jù),我們可以使用 setValue() 函數(shù)。這允許我們通過傳入行索引、列索引和值來設(shè)置 Spread 中工作表中的值:
var cellText = "Revenue" + revenueCount++; sheet.setValue(newRowIndex, 1, cellText); for (var c = 3; c < 15; c++) { sheet.setValue(newRowIndex, c, Math.floor(Math.random() * 200) + 10); }
在 P 列中設(shè)置 SUM 公式以匹配其他行,并為 Q 列設(shè)置百分比:
sheet.setFormula(newRowIndex, 15, "=SUM([@[Jan]:[Dec]])"); sheet.setValue(newRowIndex, 16, 0.15);
最后,我們可以再次使用 copyTo() 函數(shù)將 R 列到 AD 列的公式從前一行復(fù)制到新行,這次使用 CopyToOptions.formula(只復(fù)制公式):
sheet.copyTo( 10, 17, newRowIndex, 17, 1, 13, GC.Spread.Sheets.CopyToOptions.formula );
4)為表格添加迷你圖
現(xiàn)在我們可以添加迷你圖來匹配其他數(shù)據(jù)行。為此,我們需要提供一系列單元格來獲取數(shù)據(jù)以及迷你圖的一些設(shè)置。在這種情況下,我們可以指定:
- 我們剛剛添加數(shù)據(jù)的單元格范圍
- 調(diào)整迷你圖的設(shè)置使其更加美觀
var data = new GC.Spread.Sheets.Range(newRowIndex, 3, 1, 12); var setting = new GC.Spread.Sheets.Sparklines.SparklineSetting(); setting.options.seriesColor = "Text 2"; setting.options.lineWeight = 1; setting.options.showLow = true; setting.options.showHigh = true; setting.options.lowMarkerColor = "Text 2"; setting.options.highMarkerColor = "Text 1";
之后,我們調(diào)用 setSparkline() 方法并指定:
- 迷你圖的位置
- 數(shù)據(jù)的位置
- 迷你圖的方向
- 迷你圖的類型
- 之前創(chuàng)建的設(shè)置
sheet.setSparkline( newRowIndex, 2, data, GC.Spread.Sheets.Sparklines.DataOrientation.horizontal, GC.Spread.Sheets.Sparklines.SparklineType.line, setting );
如果現(xiàn)在嘗試運(yùn)行代碼,它可能看起來有點(diǎn)慢,因?yàn)槊看胃臄?shù)據(jù)和添加樣式時(shí)工作簿都會(huì)重新繪制。為了大幅加快速度并提高性能,Spread.Sheets 提供了暫停繪制和計(jì)算的功能。讓我們添加代碼以在添加行及其數(shù)據(jù)之前暫停,然后在添加行及其數(shù)據(jù)之后恢復(fù):
workbook.suspendPaint(); workbook.suspendCalcService(); //... workbook.resumeCalcService(); workbook.resumePaint();
添加完該代碼后,我們可以在瀏覽器中打開該頁面,并看到 Excel 文件加載到 Spread.Sheets 中,并添加了收入行。
5)編寫 Excel 導(dǎo)出代碼并導(dǎo)出 Excel
最后,我們可以添加一個(gè)按鈕來導(dǎo)出包含了剛剛添加的收入行的文件。為了實(shí)現(xiàn)這個(gè)需求,我們可以在單擊事件處理程序的導(dǎo)出按鈕中調(diào)用 Spread.Sheets 中內(nèi)置的導(dǎo)出方法:
document.getElementById("export").onclick = function () { var fileName = $("#exportFileName").val(); if (fileName.substr(-5, 5) !== ".xlsx") { fileName += ".xlsx"; } var json = JSON.stringify(workbook.toJSON()); workbook.export( function (blob) { // save blob to a file saveAs(blob, fileName); }, function (e) { console.log(e); }, { fileType: GC.Spread.Sheets.FileType.excel, } ); };
該代碼從 exportFileName 輸入元素獲取導(dǎo)出文件名。我們可以自定義它的文件名:
<input type="text" id="exportFileName" placeholder="Export file name" value="export.xlsx" />
然后添加一個(gè)調(diào)用此函數(shù)的按鈕:
<button id="export"Export File</button
添加收入行后,使用導(dǎo)出文件按鈕導(dǎo)出文件。
文件成功導(dǎo)出后,在 Excel 中打開它,可以看到該文件看起來與導(dǎo)入時(shí)一樣,只是現(xiàn)在我們添加了一條額外的收入線。
以上就是JavaScript實(shí)現(xiàn)導(dǎo)入和導(dǎo)出Excel的示例詳解的詳細(xì)內(nèi)容,更多關(guān)于JavaScript導(dǎo)入導(dǎo)出Excel的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
JavaScript 快捷鍵設(shè)置實(shí)現(xiàn)代碼
屏蔽Alt+F4等快捷鍵 IE Javascript快捷鍵操作2009-03-03layer.prompt使文本框?yàn)榭盏那闆r下也能點(diǎn)擊確定的方法
今天小編就為大家分享一篇layer.prompt使文本框?yàn)榭盏那闆r下也能點(diǎn)擊確定的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09js實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)隨機(jī)抽獎(jiǎng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03javascript實(shí)現(xiàn)用戶管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)用戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06原生js實(shí)現(xiàn)自定義滾動(dòng)條組件
這篇文章主要為大家詳細(xì)介紹了原生js實(shí)現(xiàn)自定義滾動(dòng)條組件的開發(fā),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01在IE和VB中支持png圖片透明效果的實(shí)現(xiàn)方法(vb源碼打包)
在IE和VB中支持png圖片透明效果的實(shí)現(xiàn)方法(vb源碼打包),需要的朋友可以參考下。2011-04-04一份老外寫的XMLHttpRequest代碼多瀏覽器支持兼容性
一份老外寫的XMLHttpRequest代碼多瀏覽器支持兼容性...2007-01-01