成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

使用Blazor框架實現在前端瀏覽器中導入和導出Excel

瀏覽:92日期:2022-06-14 15:01:04
目錄前言創建 SpreadJS Blazor 組件使用 SpreadJS 創建 Blazor 應用程序Blazor Excel 導入Blazor Excel 導出前言

Blazor 是一個相對較新的框架,用于構建具有 .NET 強大功能的交互式客戶端 Web UI。一個常見的用例是將現有的 Excel 文件導入 Blazor 應用程序,將電子表格數據呈現給用戶,并且能夠允許進行任何更改,最后將該數據導出回 Excel 文件或將其保存到數據庫。

以下是在 Blazor 中導入/導出電子表格文件的步驟:

創建 SpreadJS Blazor 組件創建 Blazor 應用程序在 Blazor 應用程序中導入 ExcelBlazor 應用程序中的 Excel 導出創建 SpreadJS Blazor 組件

SpreadJS 是一個非常強大且可擴展的 JavaScript 電子表格組件,它使這個過程變得更加簡單。

在將 SpreadJS 放入 Blazor 應用程序之前,我們必須首先創建一個 Blazor 組件來包含 SpreadJS。

在本教程中,我們將使用 Visual Studio 2022 和 SpreadJS V16.0。

要創建組件,首先要創建一個 Razor 類庫:

為簡單起見,您可以將其命名為“SpreadJS_Blazor_Lib”:

創建項目后,我們需要將 SpreadJS 文件復制到“wwwroot”文件夾:

創建這個項目還應該創建一個名為“exampleJSInterop.js”的文件,因此我們需要對其進行編輯以添加有助于將 C# 代碼連接到 SpreadJS 的 JavaScript 代碼的邏輯:

// This file is to show how a library package may provide JavaScript interop features// wrapped in a .NET APIwindow.sjsAdaptor = { init: function (host, config) {if (config.hostStyle) { var hostStyle = config.hostStyle; var styles = hostStyle.split(';'); styles.forEach((styleStr) => {var style = styleStr.split(':');host.style[style[0]] = style[1]; }); delete config.hostStyle;}return new GC.Spread.Sheets.Workbook(host, config); }, setValue: function (host, sheetIndex, row, col, value) {var spread = GC.Spread.Sheets.findControl(host);if (spread) { var sheet = spread.getSheet(sheetIndex); sheet.setValue(row, col, value);} }, openExcel: function (host, inputFile) {var spread = GC.Spread.Sheets.findControl(host);if (spread) { var excelIO = new GC.Spread.Excel.IO(); excelIO.open(inputFile.files[0], function (json) {spread.fromJSON(json); })} }};

該應用程序還應該創建一個默認的“Component1.razor”文件,我們可以將其重命名為“SpreadJS.razor”。這將是我們將用作包裝器的組件:

@using Microsoft.JSInterop@inject IJSRuntime JSRuntime<div @ref='host'></div>@code { [Parameter] public int SheetCount { get; set; } [Parameter] public string HostStyle { get; set; } private ElementReference host; public void setValue(int sheetIndex, int row, int col, object value) {JSRuntime.InvokeVoidAsync('sjsAdaptor.setValue', host, sheetIndex, row, col, value); } public void OpenExcel(ElementReference inputFile) {JSRuntime.InvokeVoidAsync('sjsAdaptor.openExcel', host, inputFile); } protected override void OnAfterRender(bool firstRender) {if (firstRender){ JSRuntime.InvokeVoidAsync('sjsAdaptor.init', host, new Dictionary<string, object>() {{ 'sheetCount', SheetCount},{ 'hostStyle', HostStyle } });} }}使用 SpreadJS 創建 Blazor 應用程序

現在我們已經使用 SpreadJS 創建了一個組件,我們可以在 Blazor 應用程序中使用它。首先,我們可以使用“Blazor WebAssemblyApp”模板添加一個新項目:

要添加 SpreadJS 組件,我們需要在解決方案資源管理器中右鍵單擊這個新項目的依賴項,然后單擊“添加項目引用”。我們的 SpreadJS_Blazor_Lib 應該列為選項之一:

在這個新項目中,應該有一個頁面文件夾,其中包含幾個不同的 razor 文件。在此,我們將要編輯 Index.razor 文件以設置 HTML 的代碼隱藏:

@page '/'@using SpreadJS_Blazor_Lib<h1>Hello, SpreadJS!</h1><SpreadJS SheetCount='3' HostStyle='@HostStyle' />@code { private string HostStyle { get; set; } = 'width:90wh;height:70vh;border: 1px solid darkgray';}

現在我們可以編輯“wwwroot”文件夾中的index.html文件。在這個文件中,我們可以添加對 SpreadJS JavaScript 和 CSS 文件的引用

<!DOCTYPE html><html><head> <meta charset='utf-8' /> <meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no' /> <title>BlazorApp1</title> <base rel='external nofollow' /> <link rel='external nofollow' rel='stylesheet' /> <link rel='external nofollow' rel='stylesheet' /> <link rel='external nofollow' rel='stylesheet' /> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/gc.spread.sheets.all.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.charts.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.shapes.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.slicers.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.print.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.barcode.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.pdf.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/plugins/gc.spread.sheets.tablesheet.16.0.5.min.js'></script> <script type='text/javascript' src='https://cdn.grapecity.com/spreadjs/hosted/scripts/interop/gc.spread.excelio.16.0.5.min.js'></script> <script src='https://www.jb51.net/aspnet/_content/SJS_Blazor_Lib/exampleJsInterop.js' type='text/javascript'></script></head><body> <app>Loading...</app> <div id='blazor-error-ui'>An unhandled error has occurred.<a class=' rel='external nofollow' reload'>Reload</a><a class='dismiss'>??</a> </div> <script src='https://www.jb51.net/aspnet/_framework/blazor.webassembly.js'></script></body></html>

我們還可以在“Pages”文件夾下編輯 Index.razor 中的代碼:

@page '/'@using SJS_Blazor_Lib<h1>Hello, SpreadJS!</h1><table> <tr><td> <label>Sheet Index</label> <input @bind-value='@SheetIndex' /></td><td> <label>Row Index</label> <input @bind-value='@Row' /></td><td> <label>Column Index</label> <input @bind-value='@Column' /></td><td> <lable>Value</lable> <input @bind-value='@Value' /></td> </tr> <tr><td> <button @onclick='doSomething'>Update Text</button></td> </tr> <tr><td> <input type='file' @ref='inputFileEle' /></td><td> <button @onclick='ImportExcel'>Import File</button></td> </tr></table><br /><SpreadJS SheetCount='3' HostStyle='@HostStyle' @ref='ss' />@code { private SpreadJS ss; private ElementReference inputFileEle; public int SheetIndex { get; set; } = 0; public int Row { get; set; } = 0; public int Column { get; set; } = 0; public string Value { get; set; } = ''; private string HostStyle { get; set; } = 'width:90wh;height:70vh;border: 1px solid darkgray'; private void doSomething() {ss.setValue(SheetIndex, Row, Column, Value); } private void ImportExcel() {ss.OpenExcel(inputFileEle); }}

這就是在 Blazor 應用程序中運行 SpreadJS 所需的全部內容:

Blazor Excel 導入

前面的代碼只是 SpreadJS 在 Blazor 應用程序中的基本用法,但我們可以通過包含一些 Excel 導入功能來添加它。借助 SpreadJS 的強大功能,您可以在 Blazor 應用程序中導入自己的 Excel 文件。實現類似于基本的 SpreadJS Blazor 代碼,但我們需要編輯 Index.razor 文件以添加一些用于設置值和打開 Excel 文件的代碼:

@page '/'@using SpreadJS_Blazor_Lib<h1>Hello, SpreadJS!</h1><table> <tr><td> <label>Sheet Index</label> <input @bind-value='@SheetIndex' /></td><td> <label>Row Index</label> <input @bind-value='@Row' /></td><td> <label>Column Index</label> <input @bind-value='@Column' /></td><td> <lable>Value</lable> <input @bind-value='@Value' /></td> </tr> <tr><td> <button @onclick='doSomething'>Update Text</button></td> </tr> <tr><td> <input type='file' @ref='inputFileEle' @onchange='ImportExcel' /></td> </tr></table><br /><SpreadJS SheetCount='3' HostStyle='@HostStyle' @ref='ss' />@code { private SpreadJS ss; private ElementReference inputFileEle; public int SheetIndex { get; set; } = 0; public int Row { get; set; } = 0; public int Column { get; set; } = 0; public string Value { get; set; } = ''; private string HostStyle { get; set; } = 'width:90wh;height:70vh;border: 1px solid darkgray'; private void doSomething() {ss.setValue(SheetIndex, Row, Column, Value); } private void ImportExcel() {ss.OpenExcel(inputFileEle); }}

一旦我們在 Index.razor 中有了該代碼,它應該可以導入,因為我們已經在前面的步驟中為 SpreadJS_Blazor_Lib 項目中的 SpreadJS.razor 和 exampleJsInterop.js 文件添加了代碼。

Blazor Excel 導出

此外,我們還可以添加導出Excel文件的功能。為此,我們需要將代碼添加到 exampleJsInterop.js 文件中:

window.sjsAdaptor = { (....) saveExcel: function (host) {var spread = GC.Spread.Sheets.findControl(host);if (spread) { var json = spread.toJSON(); var excelIO = new GC.Spread.Excel.IO(); excelIO.save(json, function (blob) {saveAs(blob, 'export.xlsx'); }, function (e) {console.log(e); });} }};

為了使“另存為”功能起作用,我們還需要在 index.html 文件中添加對 FileSaver 庫的引用:

<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/2.0.0/FileSaver.min.js'></script>

要讓此代碼在頁面上運行,我們需要將用于導出的按鈕添加到 Index.razor 代碼中:

@page '/'@using SpreadJS_Blazor_Lib<h1>Hello, SpreadJS!</h1><table> (....)<td> <button @onclick='ExportExcel'>Export File</button></td> </tr></table><br /><SpreadJS SheetCount='3' HostStyle='@HostStyle' @ref='ss' />@code { (....) private void ExportExcel() {ss.SaveExcel(); }}

“ss.SaveExcel()”調用使用 SpreadJS.razor 文件中的代碼,因此我們需要確保在其中添加指向 exampleJsInterop.js 文件中正確函數的代碼:

@using Microsoft.JSInterop@inject IJSRuntime JSRuntime<div @ref='host'></div>@code { (....) public void SaveExcel() {JSRuntime.InvokeVoidAsync('sjsAdaptor.saveExcel', host); } (....)}

以上就是使用Blazor框架實現在前端瀏覽器中導入和導出Excel的詳細內容,更多關于Blazor導入導出Excel的資料請關注好吧啦網其它相關文章!

標簽: ASP.NET
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
狠狠综合久久| 亚洲h动漫在线| 亚洲精选视频免费看| 99re8在线精品视频免费播放| 欧美日韩在线播放三区| 欧美一二三在线| 亚洲欧洲日韩av| 欧美一区二区网站| 成人精品一区二区三区中文字幕| 久久综合狠狠综合久久激情 | 成人午夜视频在线观看| 欧美xxxxxxxxx| 欧美三级视频在线观看| 亚洲免费网站| 一区二区三区电影在线播| av不卡免费看| 黄色亚洲精品| 国产精品欧美一区喷水| 午夜视频久久久| 久久精品人人做人人爽人人| 91香蕉视频mp4| 久久久精品中文字幕麻豆发布| eeuss鲁片一区二区三区在线看| 日韩视频不卡中文| 不卡的av在线播放| 久久先锋影音av鲁色资源网| 95精品视频在线| 国产日韩欧美一区二区三区乱码 | 国产日韩欧美a| 欧美日本二区| 亚洲视频免费在线| 国产视频一区欧美| 亚洲午夜精品网| 色婷婷综合激情| 久久99精品久久久久久| 91精品国产入口在线| 成熟亚洲日本毛茸茸凸凹| 久久精品欧美一区二区三区麻豆| 欧美日韩一区二区高清| 亚洲情趣在线观看| 欧美亚洲免费在线| 奇米亚洲午夜久久精品| 欧美精品黑人性xxxx| 成人午夜av在线| 中文字幕成人在线观看| 一区福利视频| 亚洲成人自拍偷拍| 欧美人狂配大交3d怪物一区| 床上的激情91.| 国产精品免费网站在线观看| 亚洲一区二区动漫| 另类小说一区二区三区| 日韩欧美久久一区| 国模大胆一区二区三区| 亚洲综合激情小说| 欧美日韩午夜精品| 女生裸体视频一区二区三区| 一区二区三区四区av| 欧美色综合网站| 99精品久久99久久久久| 亚洲激情图片小说视频| 在线一区二区三区做爰视频网站| 高清日韩电视剧大全免费| 中文一区二区在线观看| 久久久久se| 成人综合婷婷国产精品久久| 国产精品久久影院| 久久久久国产精品一区三寸| 国产成人av福利| 国产精品电影一区二区三区| 91福利在线观看| 99久久国产综合精品色伊| 亚洲一区二区三区精品在线| 7777女厕盗摄久久久| 欧美日本一区| 青青草原综合久久大伊人精品 | 欧美婷婷六月丁香综合色| www.日韩精品| 亚洲午夜免费电影| 91精品国产综合久久香蕉的特点| 国产精品igao视频网网址不卡日韩| 性欧美大战久久久久久久久| 日韩一级二级三级| 日韩亚洲国产精品| 国产一区二区三区在线观看免费视频| 国产婷婷一区二区| 欧美在线综合视频| 欧美私人啪啪vps| 久久99精品一区二区三区三区| 久久久99精品免费观看不卡| 久久久xxx| aaa欧美大片| 三级欧美在线一区| 国产视频911| 欧美日韩在线播放三区| 亚洲无线观看| 九九国产精品视频| 亚洲欧美日韩人成在线播放| 91精品国产欧美日韩| 亚洲三级免费| 成人性视频免费网站| 无吗不卡中文字幕| 日本一二三不卡| 欧美精选午夜久久久乱码6080| 亚洲精品日韩精品| 国产成人亚洲综合a∨婷婷| 亚洲黄色免费电影| 精品理论电影在线| 一本大道av伊人久久综合| 欧美日韩理论| 国产精品一二三在| 性感美女极品91精品| 国产精品日日摸夜夜摸av| 欧美日韩国产欧美日美国产精品| 日韩亚洲视频| 99国产精品久久久久久久久久久| 免费高清视频精品| 日韩美女视频一区| 久久综合九色综合97婷婷女人| 欧美综合一区二区| 在线综合欧美| 不卡av在线免费观看| 免费视频一区二区| 18欧美亚洲精品| 久久综合久久99| 欧美高清视频在线高清观看mv色露露十八 | 色婷婷久久久亚洲一区二区三区| 欧美日韩国产高清视频| 国产在线看一区| 日日夜夜精品视频免费| 专区另类欧美日韩| 久久久一区二区| 欧美一区二区网站| 色综合久久88色综合天天6 | 一区二区三区视频在线看| 久久久777精品电影网影网| 7777精品伊人久久久大香线蕉的| 久久性天堂网| 国产欧美日韩视频一区二区三区| 欧美一区在线看| 国产二区国产一区在线观看| 美女一区二区三区| 亚洲国产欧美一区二区三区丁香婷| 国产精品福利在线播放| 久久久av毛片精品| 日韩视频一区在线观看| 欧美日韩1区2区| 欧美在线影院一区二区| 久久婷婷人人澡人人喊人人爽| 99www免费人成精品| 狠狠综合久久av一区二区老牛| 欧美福利影院| 欧美一区成人| 99久久伊人网影院| 成人动漫一区二区三区| 粉嫩av亚洲一区二区图片| 国产老妇另类xxxxx| 国产一区视频导航| 极品少妇xxxx精品少妇偷拍| 秋霞影院一区二区| 性感美女极品91精品| 亚洲一区二区三区四区不卡| 亚洲一区在线视频| 夜夜嗨av一区二区三区| 亚洲综合激情网| 亚洲在线视频一区| 亚洲综合丁香婷婷六月香| 亚洲综合999| 亚洲午夜羞羞片| 首页欧美精品中文字幕| 天天色天天操综合| 日韩精品亚洲专区| 日本不卡一二三| 久久99国产精品免费| 激情综合一区二区三区| 狠狠网亚洲精品| 狠狠色狠狠色综合| 国产精品自拍av| 成人免费视频国产在线观看| 成人av网站在线观看| gogo大胆日本视频一区| 99国产精品久久久久久久久久久| 99久久精品免费看国产| 91麻豆国产自产在线观看| 欧美福利在线| 伊人久久久大香线蕉综合直播| 亚洲激情专区| 亚洲一区成人| 色哟哟一区二区在线观看| 91九色02白丝porn| 欧美日韩色一区| 91麻豆精品国产91久久久更新时间 | 亚洲国产成人porn| 婷婷中文字幕综合| 美国欧美日韩国产在线播放| 国产一区二区视频在线| hitomi一区二区三区精品| 欧美日韩国产在线一区| 亚洲精品国产日韩| 久久久水蜜桃|