轉(zhuǎn)帖|使用教程|編輯:龔雪|2022-10-17 11:09:55.880|閱讀 275 次
概述:本文將為大家介紹如何使用SpreadJS直接在頁(yè)面端導(dǎo)入和導(dǎo)出 Excel 文件,歡迎下載相關(guān)組件體驗(yàn)~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
JavaScript在前端領(lǐng)域占據(jù)著絕對(duì)的統(tǒng)治地位,目前更是從瀏覽器到服務(wù)端,移動(dòng)端,嵌入式,幾乎所有的所有的應(yīng)用領(lǐng)域都可以使用它。技術(shù)圈有一句很經(jīng)典的話“凡是能用JavaScript實(shí)現(xiàn)的東西,最后都會(huì)用JavaScript實(shí)現(xiàn)”。
Excel 電子表格自 1980 年代以來一直為各行業(yè)所廣泛使用,至今已擁有超過3億用戶,大多數(shù)人都熟悉 Excel 電子表格體驗(yàn)。許多企業(yè)在其業(yè)務(wù)的各個(gè)環(huán)節(jié)中使用了 Excel 電子表格進(jìn)行數(shù)據(jù)管理。
SpreadJS可以為我們的Web應(yīng)用提供更好的交互體驗(yàn),以及更靈活的權(quán)限控制、數(shù)據(jù)整合、數(shù)據(jù)可視化、戰(zhàn)略績(jī)效測(cè)量 (SPM)、復(fù)雜的統(tǒng)計(jì)分析等。多年來,Excel 兼容性一直是SpreadJS最重要的功能之一。
SpreadJS 提供了熟悉的 Excel 電子表格界面。用戶可以通過SpreadJS直接在頁(yè)面端導(dǎo)入和導(dǎo)出 Excel 文件——這一切無需依賴 Excel。
在本文中,我們將介紹如何按照以下步驟在 JavaScript 中,實(shí)現(xiàn)頁(yè)面端電子表格導(dǎo)入/導(dǎo)出到 Excel:
首先,我們可以使用托管在 NPM 上的SpreadJS文件。為此,我們可以使用命令行參數(shù)進(jìn)行安裝。打開命令提示符并導(dǎo)航到應(yīng)用程序的位置。在那里,您可以使用一個(gè)命令安裝所需的文件。
在這種情況下,我們需要基本的 Spread-Sheets 庫(kù)、Spread-ExcelIO 和 jQuery:
npm i @grapecity/spread-sheets @grapecity/spread-excelio jquery
SpreadJS 不依賴于 jQuery,但在這種情況下,我們使用它來提供簡(jiǎn)單的跨域請(qǐng)求支持,稍后我們將對(duì)其進(jìn)行回顧。
一旦安裝了這些,我們就可以在我們的代碼中添加對(duì)這些腳本和 CSS 文件的引用:
<!DOCTYPE html> <html> <head> <title>SpreadJS ExcelIO</title> <script src="./node_modules/jquery/dist/jquery.min.js" type="text/javascript"></script> <script src="http://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2014-11-29/FileSaver.min.js"></script> <link href="./node_modules/@grapecity/spread-sheets/styles/gc.spread.sheets.excel2013white.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="./node_modules/@grapecity/spread-sheets/dist/gc.spread.sheets.all.min.js"></script> <script type="text/javascript" src="./node_modules/@grapecity/spread-excelio/dist/gc.spread.excelio.min.js"></script> </head> <body> <div id="ss" style="height:600px; width :100%; "></div> </body> </html>
除了SpreadJS 和 jQuery 文件之外,我們還需要導(dǎo)入 FileSaver 庫(kù),為了便于后續(xù)程序處理,SpreadJS默認(rèn)提供完整的文件流,F(xiàn)ileSaver庫(kù)可以用來把文件流轉(zhuǎn)成文件下載到本地。
然后我們可以在頁(yè)面中添加一個(gè)腳本來初始化 Spread.Sheets 組件和一個(gè) div 元素來包含它(因?yàn)?SpreadJS 電子表格組件使用了一個(gè)畫布,這是初始化組件所必需的):
<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>
我們需要?jiǎng)?chuàng)建一個(gè)客戶端 ExcelIO 組件的實(shí)例,我們可以使用它來打開文件:
var excelIO = new GC.Spread.Excel.IO();
然后我們需要添加一個(gè)函數(shù)來導(dǎo)入文件。在此示例中,我們導(dǎo)入了一個(gè)本地文件,但您可以對(duì)服務(wù)器上的文件執(zhí)行相同的操作。如果從服務(wù)器導(dǎo)入文件,您需要引用該位置。下面是一個(gè)輸入元素的示例,用戶可以在其中輸入文件的位置:
<input type="text" id="importUrl" value="http://www.testwebsite.com/files/TestExcel.xlsx" style="width:300px" />
一旦你有了它,你可以直接在腳本代碼中訪問該值:
var excelUrl = $("#importUrl").val();
導(dǎo)入函數(shù)的以下代碼使用“excelUrl”變量的本地文件:
function ImportFile() { var excelUrl = "./test.xlsx"; var oReq = new XMLHttpRequest(); oReq.open('get', excelUrl, true); oReq.responseType = 'blob'; oReq.onload = function () { var blob = oReq.response; excelIO.open(blob, LoadSpread, function (message) { console.log(message); }); }; oReq.send(null); } function LoadSpread(json) { jsonData = json; workbook.fromJSON(json); workbook.setActiveSheet("Revenues (Sales)"); }
無論您是在服務(wù)器上還是在本地引用文件,都需要在 \$(document).ready 函數(shù)內(nèi)的腳本中添加以下內(nèi)容:
$(document).ready(function () { $.support.cors = true; workbook = new GC.Spread.Sheets.Workbook(document.getElementById("ss")); //... });
在這種情況下,我們需要啟用 Cross-Origin-Request-Support,因?yàn)槲覀兛赡軙?huì)從 URL 加載文件。因此 \$.support.cors = true;行,否則嘗試加載它會(huì)導(dǎo)致 CORS 錯(cuò)誤。
我們使用本教程的“損益表”Excel 模板導(dǎo)入本地文件。
現(xiàn)在我們可以使用 Spread.Sheets 腳本在這個(gè)文件中添加另一個(gè)收入行。讓我們?cè)陧?yè)面上添加一個(gè)按鈕來執(zhí)行此操作:
<button id="addRevenue">Add Revenue</button>
我們可以為該按鈕的單擊事件處理程序編寫一個(gè)函數(shù)來添加一行并從前一行復(fù)制樣式以準(zhǔn)備添加一些數(shù)據(jù)。要復(fù)制樣式,我們需要使用 copyTo 函數(shù)并傳入:
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ù)和 Sparkline 的腳本代碼將包含在此按鈕單擊事件處理程序中。對(duì)于大部分?jǐn)?shù)據(jù),我們可以使用 setValue 函數(shù)。這允許我們通過傳入行索引、列索引和值來在 Spread 中的工作表中設(shè)置值:
sheet.setValue(newRowIndex, 1, "Revenue 8"); 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ù)將先前行中的公式復(fù)制到 R 到 AD 列的新行,這次使用 CopyToOptions.formula:
sheet.copyTo(10, 17, newRowIndex, 17, 1, 13, GC.Spread.Sheets.CopyToOptions.formula);
現(xiàn)在,我們可以添加迷你圖來匹配其他數(shù)據(jù)行。為此,我們需要提供一系列單元格以從中獲取數(shù)據(jù)以及迷你圖的一些設(shè)置。在這種情況下,我們可以指定:
var data = new GC.Spread.Sheets.Range(11, 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 方法并指定:
sheet.setSparkline(11, 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ì)算服務(wù)的能力。讓我們?cè)谔砑右恍屑捌鋽?shù)據(jù)之前添加代碼以暫停兩者,然后在之后恢復(fù)兩者:
workbook.suspendPaint(); workbook.suspendCalcService(); //... workbook.resumeCalcService(); workbook.resumePaint();
添加該代碼后,我們可以在 Web 瀏覽器中打開該頁(yè)面,并查看 Excel 文件加載到 Spread.Sheets 中并添加了收入行。重要提示:請(qǐng)記住,出于安全考慮,Chrome 不允許您打開本地文件,因此您需要使用 Firefox 等網(wǎng)絡(luò)瀏覽器才能成功運(yùn)行此代碼?;蛘?,從網(wǎng)站 URL 加載文件應(yīng)該可以在任何瀏覽器中正常打開。
最后,我們可以添加一個(gè)按鈕來導(dǎo)出包含添加行的文件。為此,我們可以使用 Spread.Sheets 中內(nèi)置的客戶端 ExcelIO 代碼:
function ExportFile() { var fileName = $("#exportFileName").val(); if (fileName.substr(-5, 5) !== '.xlsx') { fileName += '.xlsx'; } var json = JSON.stringify(workbook.toJSON()); excelIO.save(json, function (blob) { saveAs(blob, fileName); }, function (e) { if (e.errorCode === 1) { alert(e.errorMessage); } }); }
該代碼從 exportFileName 輸入元素獲取導(dǎo)出文件名。我們可以定義它并讓用戶像這樣命名文件:
<input type="text" id="exportFileName" placeholder="Export file name" value="export.xlsx" />
然后我們可以添加一個(gè)按鈕來調(diào)用這個(gè)函數(shù):
<button id="export">Export File</button> document.getElementById("export").onclick = function () { ExportFile(); }
添加收入行后,您可以使用“導(dǎo)出文件”按鈕導(dǎo)出文件。確保添加 FileSaver 外部庫(kù)以允許用戶將文件保存在他們想要的位置:
<script src="http://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2014-11-29/FileSaver.min.js"></script>
成功導(dǎo)出文件后,您可以在 Excel 中打開它,并查看文件與導(dǎo)入時(shí)的外觀相同,只是現(xiàn)在我們添加了額外的收入行。
這只是一個(gè)示例,說明如何使用 SpreadJS JavaScript 電子表格將數(shù)據(jù)添加到 Excel 文件,然后使用簡(jiǎn)單的 JavaScript 代碼將它們導(dǎo)出回 Excel。
本文內(nèi)容源自
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: