using System;
using System.Net.Http;
using System.Collections.Generic;
using System.Threading.Tasks;
using System.Text;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
namespaceInfragistics.Samples
{
publicclassProgram
{
publicstaticasync Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");
builder.Services.AddScoped(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });
await builder.Build().RunAsync();
}
}
}cs
@using Microsoft.AspNetCore.Components@using Microsoft.AspNetCore.Components.Rendering@using Microsoft.AspNetCore.Components.Forms@using Microsoft.AspNetCore.Components.RenderTree@using Microsoft.AspNetCore.Components.Web@using System.Text.RegularExpressions@using System.Net.Http@using System.Net.Http.Json@using Microsoft.AspNetCore.Components.Routing@using Microsoft.AspNetCore.Components.WebAssembly.Http@using Microsoft.JSInterop@using Microsoft.JSInterop.WebAssembly@using Infragistics.Documents.Excel@using Documents.Excel.ConditionalFormatting@using Documents.Excel.Sorting@using Documents.Excel.Filtering@using System.Runtime.InteropServices.JavaScript@implements IDisposable
<divclass="container vertical"><divclass="options vertical"><button @onclick="CreateXlsx">Save Workbook to XLSX</button><divclass="options vertical"><span>Select Table to Export:</span><labelclass="options-item"><inputchecked=@isSorted @onchange="OnSortChange"type="checkbox" />Apply Sort</label><labelclass="options-item"><inputchecked=@isFiltered @onchange=OnFilterChangetype="checkbox" />Apply Filter</label><labelclass="options-item"><inputchecked=@isProtected @onchange=OnProtectChangetype="checkbox" />Protect Worksheet</label><labelclass="options-item"><inputchecked=@showGridlines @onchange=OnGridlinesChangetype="checkbox" />Show Gridlines</label><labelclass="options-item"><inputchecked=@showHeaders @onchange=OnHeadersChangetype="checkbox" />Show Row and Column Headers</label><labelclass="options-item"><inputchecked=@applyConditionalFormatting @onchange=OnFormatChangetype="checkbox" />Apply Conditional Formatting</label></div></div></div>@code {
[Inject]
public IJSRuntime Runtime { get; set; }
publicbool canSave = false;
public Random Rand = new Random();
publicobject data;
publicbool isSorted;
publicbool isFiltered;
publicbool isProtected;
publicbool showGridlines;
publicbool showHeaders;
publicbool applyConditionalFormatting;
public Workbook wb;
protectedoverridevoidOnInitialized()
{
Workbook.InProcessRuntime = this.Runtime as IJSInProcessRuntime;
}
publicvoidExportData(WorkbookFormat format) {
this.InitData();
this.wb.SetCurrentFormat(format);
var sheet = this.wb.Worksheets[0];
sheet.DefaultColumnWidth = 220 * 20;
if (this.isSorted)
{
sheet.SortSettings.SetRegion("A2:A20");
sheet.SortSettings.SortConditions.Add(
new RelativeIndex(0), new OrderedSortCondition(SortDirection.Ascending));
}
if (this.isFiltered)
{
sheet.FilterSettings.SetRegion("C1:C20");
sheet.FilterSettings.ApplyCustomFilter(0, new CustomFilterCondition(ExcelComparisonOperator.Equals, "USA"));
}
if (this.isProtected)
{
sheet.Protect();
}
if (!this.showHeaders)
{
sheet.DisplayOptions.ShowRowAndColumnHeaders = false;
}
if (!this.showGridlines)
{
sheet.DisplayOptions.ShowGridlines = false;
}
if (this.applyConditionalFormatting)
{
var orange = Infragistics.Core.Graphics.Colors.Orange;
var blue = Infragistics.Core.Graphics.Colors.Blue;
var red = Infragistics.Core.Graphics.Colors.Red;
var format1 = sheet.ConditionalFormats.AddTextCondition(
"A1:A20", "Amazon", FormatConditionTextOperator.Contains);
var format2 = sheet.ConditionalFormats.AddTextCondition(
"A1:A20", "IBM", FormatConditionTextOperator.Contains);
var format3 = sheet.ConditionalFormats.AddTextCondition(
"A1:A20", "Tesla", FormatConditionTextOperator.Contains);
format1.CellFormat.Font.ColorInfo = new WorkbookColorInfo(orange);
format2.CellFormat.Font.ColorInfo = new WorkbookColorInfo(blue);
format3.CellFormat.Font.ColorInfo = new WorkbookColorInfo(red);
}
}
publicvoidInitData()
{
var companies = newstring[] { "Amazon", "Ford", "Jaguar", "Tesla", "IBM", "Microsoft" };
var firstNames = newstring[] { "Andrew", "Mike", "Martin", "Ann", "Victoria", "John", "Brian", "Jason", "David" };
var lastNames = newstring[] { "Smith", "Jordan", "Johnson", "Anderson", "Louis", "Phillips", "Williams" };
var cities = newstring[] { "London", "Paris", "Boston", "Berlin" };
var countries = newstring[] { "UK", "France", "USA", "Germany", "Poland", "Brazil" };
var titles = newstring[] { "Sales Rep.", "Owner", "Administrator", "Manager" };
var streets = newstring[] { "Main St", "Madison St", "Broad Way" };
var headers = newstring[] {"Company Name",
"Contact Title",
"Country",
"City",
"Contact Name",
"Address",
"Postal Code",
"Customer ID",
"Salary",
"Age" };
// generating excel data sourcethis.wb = new Workbook();
var sheet = this.wb.Worksheets.Add("Sheet1");
for (var i = 0; i < headers.Length; i++)
{
sheet.Rows[0].Cells[i].Value = headers[i];
}
for (var i = 1; i < 20; i++)
{
var companyName = this.GetItem(companies);
var contactTitle = this.GetItem(titles);
var country = this.GetItem(countries);
var city = this.GetItem(cities);
var contactName = this.GetItem(firstNames) + " " + this.GetItem(lastNames);
var address = this.GetRandom(10, 60) + " " + this.GetItem(streets);
var postalCode = this.GetRandom(100, 400) + " " + this.GetRandom(50, 90);
var customerID = "CID-" + this.GetRandom(500, 900);
var salary = this.GetRandom(85000, 200000).ToString();
var age = this.GetRandom(20, 65).ToString();
var dataItem = newstring[] {
companyName,
contactTitle,
country,
city,
contactName,
address,
postalCode,
customerID,
salary,
age
};
for (var j = 0; j < dataItem.Length; j++)
{
sheet.Rows[i].Cells[j].Value = dataItem[j];
}
}
}
privatevoidCreateXlsx()
{
ExportData(WorkbookFormat.Excel2007);
this.SaveFile(this.wb, "ExcelWorkbook");
}
publicvoidSaveFile(Workbook wb, string fileNameWithoutExtension)
{
var ms = new System.IO.MemoryStream();
if (wb != null)
{
wb.Save(ms);
string extension;
switch (wb.CurrentFormat)
{
default:
case WorkbookFormat.StrictOpenXml:
case WorkbookFormat.Excel2007:
extension = ".xlsx";
break;
case WorkbookFormat.Excel2007MacroEnabled:
extension = ".xlsm";
break;
case WorkbookFormat.Excel2007MacroEnabledTemplate:
extension = ".xltm";
break;
case WorkbookFormat.Excel2007Template:
extension = ".xltx";
break;
case WorkbookFormat.Excel97To2003:
extension = ".xls";
break;
case WorkbookFormat.Excel97To2003Template:
extension = ".xlt";
break;
}
string fileName = fileNameWithoutExtension + extension;
string mime;
switch (wb.CurrentFormat)
{
default:
case WorkbookFormat.Excel2007:
case WorkbookFormat.Excel2007MacroEnabled:
case WorkbookFormat.Excel2007MacroEnabledTemplate:
case WorkbookFormat.Excel2007Template:
case WorkbookFormat.StrictOpenXml:
mime = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
break;
case WorkbookFormat.Excel97To2003:
case WorkbookFormat.Excel97To2003Template:
mime = "application/vnd.ms-excel";
break;
}
ms.Position = 0;
var bytes = ms.ToArray();
SaveFile(bytes, fileName, mime);
}
}
JSObject module;
bool moduleDownloaded = false;
publicasyncvoidSaveFile(byte[] bytes, string fileName, string mime)
{
if (Runtime is WebAssemblyJSRuntime wasmRuntime)
{
if (!moduleDownloaded)
{
module = await JSHost.ImportAsync("BlazorFastDownload", "../BlazorFastDownloadFile.js");
moduleDownloaded = true;
}
BlazorFastDownload.DownloadFile(fileName, mime, bytes);
}
elseif (Runtime is IJSInProcessRuntime inProc)
inProc.InvokeVoid("BlazorDownloadFile", fileName, mime, bytes);
}
publicvoidDispose()
{
if (moduleDownloaded && module != null)
{
module.Dispose();
}
}
publicvoidOnSortChange(ChangeEventArgs args)
{
this.isSorted = args.Value != null ? (bool)args.Value : false;
}
publicvoidOnFilterChange(ChangeEventArgs args)
{
this.isFiltered = args.Value != null ? (bool)args.Value : false;
}
publicvoidOnProtectChange(ChangeEventArgs args)
{
this.isProtected = args.Value != null ? (bool)args.Value : false;
}
publicvoidOnGridlinesChange(ChangeEventArgs args)
{
this.showGridlines = args.Value != null ? (bool)args.Value : false;
}
publicvoidOnHeadersChange(ChangeEventArgs args)
{
this.showHeaders = args.Value != null ? (bool)args.Value : false;
}
publicvoidOnFormatChange(ChangeEventArgs args)
{
this.applyConditionalFormatting = args.Value != null ? (bool)args.Value : false;
}
publicdoubleGetRandom(double min, double max)
{
return Math.Round(min + (Rand.NextDouble() * (max - min)));
}
publicstringGetItem(string[] array)
{
var index = (int)Math.Round(GetRandom(0, array.Length - 1));
return array[index];
}
}razor
// these methods are from:// https://www.meziantou.net/generating-and-downloading-a-file-in-a-blazor-webassembly-application.htmfunctionBlazorDownloadFile(filename, contentType, content) {
// Blazor marshall byte[] to a base64 string, so we first need to convert the string (content) to a Uint8Array to create the Filevar data = base64DecToArr(content);
// Create the URLvar file = new File([data], filename, { type: contentType });
var exportUrl = URL.createObjectURL(file);
// Create the <a> element and click on itvar a = document.createElement("a");
document.body.appendChild(a);
a.href = exportUrl;
a.download = filename;
a.target = "_self";
a.click();
// We don't need to keep the url, let's release the memory
URL.revokeObjectURL(exportUrl);
}
// Convert a base64 string to a Uint8Array. This is needed to create a blob object from the base64 string.// The code comes from: https://developer.mozilla.org/fr/docs/Web/API/WindowBase64/D%C3%A9coder_encoder_en_base64functionb64ToUint6(nChr) {
return nChr > 64 && nChr < 91 ? nChr - 65 : nChr > 96 && nChr < 123 ? nChr - 71 : nChr > 47 && nChr < 58 ? nChr + 4 : nChr === 43 ? 62 : nChr === 47 ? 63 : 0;
}
functionbase64DecToArr(sBase64, nBlocksSize) {
var sB64Enc = sBase64.replace(/[^A-Za-z0-9\+\/]/g, ""), nInLen = sB64Enc.length, nOutLen = nBlocksSize ? Math.ceil((nInLen * 3 + 1 >> 2) / nBlocksSize) * nBlocksSize : nInLen * 3 + 1 >> 2, taBytes = newUint8Array(nOutLen);
for (var nMod3, nMod4, nUint24 = 0, nOutIdx = 0, nInIdx = 0; nInIdx < nInLen; nInIdx++) {
nMod4 = nInIdx & 3;
nUint24 |= b64ToUint6(sB64Enc.charCodeAt(nInIdx)) << 18 - 6 * nMod4;
if (nMod4 === 3 || nInLen - nInIdx === 1) {
for (nMod3 = 0; nMod3 < 3 && nOutIdx < nOutLen; nMod3++, nOutIdx++) {
taBytes[nOutIdx] = nUint24 >>> (16 >>> nMod3 & 24) & 255;
}
nUint24 = 0;
}
}
return taBytes;
}
//# sourceMappingURL=BlazorDownloadFile.js.mapjs
/*
CSS styles are loaded from the shared CSS file located at:
https://static.infragistics.com/xplatform/css/samples/
*/css
このサンプルが気に入りましたか? 完全な Ignite UI for Blazorツールキットにアクセスして、すばやく独自のアプリの作成を開始します。無料でダウンロードできます。
最速のデータ グリッド、高性能なチャート、すぐに使用できる機能のフルセットなどを含む 60 以上の再利用可能なコンポーネント を使用して、最新の Web エクスペリエンスを構築します。
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
worksheet.DisplayOptions.ShowGridlines = false;
razor
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
worksheet.DisplayOptions.GridlineColor = Core.Graphics.Colors.Red;
razor
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
worksheet.DisplayOptions.ShowRowAndColumnHeaders = false;
razor
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
worksheet.Protect();
worksheet.Columns[0].CellFormat.Locked = ExcelDefaultableBoolean.False;
razor
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
worksheet.FilterSettings.SetRegion("Sheet1!A1:A10");
worksheet.FilterSettings.ApplyAverageFilter(0, Documents.Excel.Filtering.AverageFilterType.AboveAverage);
razor
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
worksheet.DisplayOptions.MagnificationInNormalView = 300;
razor
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
worksheet.SortSettings.SortConditions.Add(new RelativeIndex(0), new Infragistics.Documents.Excel.Sorting.OrderedSortCondition(Documents.Excel.Sorting.SortDirection.Ascending));
razor
var workbook = new Workbook();
var worksheet = workbook.Sheets.Add("Sheet1", SheetType.Worksheet) as Worksheet;
var format = worksheet.ConditionalFormats.AddAverageCondition("A1:A10", Documents.Excel.ConditionalFormatting.FormatConditionAboveBelow.AboveAverage);
format.CellFormat.Font.ColorInfo = new WorkbookColorInfo(Core.Graphics.Colors.Red);
razor