React ワークシートの使用
React Excel Engine の worksheet
にデータが保存されます。Worksheet の行やセルにデータを入力でき、対応する値を設定できます。worksheet
は、フィルター、ソート、セル書式のカスタマイズができます。
React ワークシートの使用の例
EXAMPLE
ExcelSharedData.ts
ExcelUtility.ts
TSX
export class ExcelSharedData {
}
ts コピー import { saveAs } from "file-saver" ;
import { Workbook } from "@infragistics/igniteui-react-excel" ;
import { WorkbookFormat } from "@infragistics/igniteui-react-excel" ;
import { WorkbookSaveOptions } from "@infragistics/igniteui-react-excel" ;
import { WorkbookLoadOptions } from "@infragistics/igniteui-react-excel" ;
import { IgrExcelXlsxModule } from "@infragistics/igniteui-react-excel" ;
import { IgrExcelCoreModule } from "@infragistics/igniteui-react-excel" ;
import { IgrExcelModule } from "@infragistics/igniteui-react-excel" ;
IgrExcelCoreModule.register();
IgrExcelModule.register();
IgrExcelXlsxModule.register();
export class ExcelUtility {
public static getExtension(format: WorkbookFormat): string {
switch (format) {
case WorkbookFormat.StrictOpenXml:
case WorkbookFormat.Excel2007:
return ".xlsx" ;
case WorkbookFormat.Excel2007MacroEnabled:
return ".xlsm" ;
case WorkbookFormat.Excel2007MacroEnabledTemplate:
return ".xltm" ;
case WorkbookFormat.Excel2007Template:
return ".xltx" ;
case WorkbookFormat.Excel97To2003:
return ".xls" ;
case WorkbookFormat.Excel97To2003Template:
return ".xlt" ;
}
}
public static load(file: File): Promise <Workbook> {
return new Promise <Workbook>((resolve, reject ) => {
ExcelUtility.readFileAsUint8Array(file).then((a ) => {
Workbook.load(a, new WorkbookLoadOptions(), (w ) => {
resolve(w);
}, (e ) => {
reject(e);
});
}, (e ) => {
reject(e);
});
});
}
public static loadFromUrl(url: string ): Promise <Workbook> {
return new Promise <Workbook>((resolve, reject ) => {
const req = new XMLHttpRequest();
req.open("GET" , url, true );
req.responseType = "arraybuffer" ;
req.onload = (d): void => {
const data = new Uint8Array (req.response);
Workbook.load(data, new WorkbookLoadOptions(), (w ) => {
resolve(w);
}, (e ) => {
reject(e);
});
};
req.send();
});
}
public static save(workbook: Workbook, fileNameWithoutExtension : string ): Promise <string > {
return new Promise <string >((resolve, reject ) => {
const opt = new WorkbookSaveOptions();
opt.type = "blob" ;
workbook.save(opt, (d ) => {
const fileExt = ExcelUtility.getExtension(workbook.currentFormat);
const fileName = fileNameWithoutExtension + fileExt;
saveAs(d as Blob, fileName);
resolve(fileName);
}, (e ) => {
reject(e);
});
});
}
private static readFileAsUint8Array(file: File): Promise <Uint8Array > {
return new Promise <Uint8Array >((resolve, reject ) => {
const fr = new FileReader();
fr.onerror = (e): void => {
reject(fr.error);
};
if (fr.readAsBinaryString) {
fr.onload = (e): void => {
const rs = (fr as any ).resultString;
const str: string = rs != null ? rs : fr.result;
const result = new Uint8Array (str.length);
for (let i = 0 ; i < str.length; i++) {
result[i] = str.charCodeAt(i);
}
resolve(result);
};
fr.readAsBinaryString(file);
} else {
fr.onload = (e): void => {
resolve(new Uint8Array (fr.result as ArrayBuffer ));
};
fr.readAsArrayBuffer(file);
}
});
}
}
ts コピー import React from 'react' ;
import ReactDOM from 'react-dom/client' ;
import './index.css' ;
import { ExcelUtility } from './ExcelUtility' ;
import { IgrExcelModule } from "@infragistics/igniteui-react-excel" ;
import { Workbook } from "@infragistics/igniteui-react-excel" ;
import { Worksheet } from "@infragistics/igniteui-react-excel" ;
import { WorkbookFormat } from "@infragistics/igniteui-react-excel" ;
import { Color } from "@infragistics/igniteui-react-core" ;
import {
CustomFilterCondition,
ExcelComparisonOperator,
FormatConditionTextOperator,
OrderedSortCondition,
RelativeIndex,
SortDirection,
WorkbookColorInfo
} from "@infragistics/igniteui-react-excel" ;
IgrExcelModule.register();
export default class ExcelLibraryUsingWorksheets extends React.Component <any, any> {
public data: any ;
public isSorted: boolean ;
public isFiltered: boolean ;
public isProtected: boolean ;
public showGridlines: boolean ;
public showHeaders: boolean ;
public applyConditionalFormatting: boolean ;
public workbook: Workbook;
constructor (props: any ) {
super (props);
this .showGridlines = true ;
this .showHeaders = true ;
}
public exportData = (): void => {
this .initData();
const sheet = this .workbook.worksheets(0 );
sheet.defaultColumnWidth = 220 * 20 ;
if (this .isSorted) {
sheet.sortSettings.setRegion("A2:A20" );
sheet.sortSettings.sortConditions().addItem(
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) {
const green = new Color();
green.colorString = "Green" ;
const blue = new Color();
blue.colorString = "Blue" ;
const orange = new Color();
orange.colorString = "Orange" ;
const format = sheet.conditionalFormats().addTextCondition(
"A1:A20" , "Amazon" , FormatConditionTextOperator.Contains);
const format2 = sheet.conditionalFormats().addTextCondition(
"A1:A20" , "IBM" , FormatConditionTextOperator.Contains);
const format3 = sheet.conditionalFormats().addTextCondition(
"A1:A20" , "Tesla" , FormatConditionTextOperator.Contains);
format.cellFormat.font.colorInfo = new WorkbookColorInfo(green);
format2.cellFormat.font.colorInfo = new WorkbookColorInfo(blue);
format3.cellFormat.font.colorInfo = new WorkbookColorInfo(orange);
}
ExcelUtility.save(this .workbook, "worksheetsSample" );
}
public onChange = (e: any ): void => {
switch (e.target.id)
{
case "isSorted" :
this .isSorted = e.target.checked;
break ;
case "isFiltered" :
this .isFiltered = e.target.checked;
break ;
case "isProtected" :
this .isProtected = e.target.checked;
break ;
case "showGridlines" :
this .showGridlines = e.target.checked;
break ;
case "showHeaders" :
this .showHeaders = e.target.checked;
break ;
case "applyFormat" :
this .applyConditionalFormatting = e.target.checked;
break ;
}
}
public render (): JSX .Element {
return (
<div className ="container sample" >
<div className ="options horizontal" >
<button className ="options-button" onClick ={this.exportData} > Save Workbook</button >
</div >
<div className ="options vertical" >
<label className ="options-label" > <input id ="isSorted" defaultChecked ={this.isSorted} onChange ={this.onChange} type ="checkbox" /> Apply Sort</label >
<label className ="options-label" > <input id ="isFiltered" defaultChecked ={this.isFiltered} onChange ={this.onChange} type ="checkbox" /> Apply Filter</label >
<label className ="options-label" > <input id ="isProtected" defaultChecked ={this.isProtected} onChange ={this.onChange} type ="checkbox" /> Protect Worksheet</label >
<label className ="options-label" > <input id ="showGridlines" defaultChecked ={this.showGridlines} onChange ={this.onChange} type ="checkbox" /> Show Gridlines</label >
<label className ="options-label" > <input id ="showHeaders" defaultChecked ={this.showHeaders} onChange ={this.onChange} type ="checkbox" /> Show Row and Column Headers</label >
<label className ="options-label" > <input id ="applyFormat" defaultChecked ={this.applyConditionalFormatting} onChange ={this.onChange} type ="checkbox" /> Apply Conditional Formatting</label >
</div >
</div >
);
}
public initData() {
const companies = ["Amazon" , "Ford" , "Jaguar" , "Tesla" , "IBM" , "Microsoft" ];
const firstNames = ["Andrew" , "Mike" , "Martin" , "Ann" , "Victoria" , "John" , "Brian" , "Jason" , "David" ];
const lastNames = ["Smith" , "Jordan" , "Johnson" , "Anderson" , "Louis" , "Phillips" , "Williams" ];
const cities = ["London" , "Paris" , "Boston" , "Berlin" ];
const countries = ["UK" , "France" , "USA" , "Germany" , "Poland" , "Brazil" ];
const titles = ["Sales Rep." , "Owner" , "Administrator" , "Manager" ];
const streets = ["Main St" , "Madison St" , "Broad Way" ];
const headers = ["Company Name" ,
"Contact Title" ,
"Country" ,
"City" ,
"Contact Name" ,
"Address" ,
"Postal Code" ,
"Customer ID" ,
"Salary" ,
"Age" ];
const dataSource = new Array<any > ();
this .workbook = new Workbook(WorkbookFormat.Excel2007);
const sheet = this .workbook.worksheets().add("Sheet1" );
for (let i = 0 ; i < headers.length; i++) {
sheet.rows(0).cells(i).value = headers[i];
}
for (let i = 1; i < 20; i++) {
const companyName = this.getItem(companies);
const contactTitle = this.getItem(titles);
const country = this.getItem(countries);
const city = this.getItem(cities);
const contactName = this.getItem(firstNames) + " " + this.getItem(lastNames);
const address = this.getRandom(10, 60) + " " + this.getItem(streets);
const postalCode = this.getRandom(100, 400) + " " + this.getRandom(50, 90);
const customerID = "CID-" + this.getRandom(500, 900);
const salary = this.getSalary(85000, 200000);
const age = this.getRandom(20, 65);
const dataItem = [
companyName,
contactTitle,
country,
city,
contactName,
address,
postalCode,
customerID,
salary,
age
];
for (let j = 0; j < dataItem.length; j++) {
sheet.rows(i).cells(j).value = dataItem[j];
}
}
}
public getRandom(min: number, max: number): number {
return Math.floor(Math.random() * (max - min + 1) + min);
}
public getItem(array: string[]): string {
const i = this.getRandom(0, array.length - 1);
return array[i];
}
public getSalary(min: number, max: number) {
const n = this.getRandom(min, max);
const s = n.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, "$&,");
return "$" + s.replace(".00", "");
}
}
// rendering above class to the React DOM
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<ExcelLibraryUsingWorksheets /> );
tsx コピー
このサンプルが気に入りましたか? 完全な Ignite UI for Reactツールキットにアクセスして、すばやく独自のアプリの作成を開始します。無料でダウンロードできます。
以下のコードは、以下のコード スニペットを使用するインポートを示します。
import { Workbook } from "igniteui-react-excel" ;
import { Worksheet } from "igniteui-react-excel" ;
import { WorkbookFormat } from "igniteui-react-excel" ;
import { Color } from "igniteui-react-core" ;
import { CustomFilterCondition } from "igniteui-react-excel" ;
import { ExcelComparisonOperator } from "igniteui-react-excel" ;
import { FormatConditionTextOperator } from "igniteui-react-excel" ;
import { OrderedSortCondition } from "igniteui-react-excel" ;
import { RelativeIndex } from "igniteui-react-excel" ;
import { SortDirection } from "igniteui-react-excel" ;
import { WorkbookColorInfo } from "igniteui-react-excel" ;
ts
ガイドラインの設定
グリッド線は、ワークシートでセルを視覚的に分離するために使用されます。グリッド線は表示または非表示にできます。また、色を変更することもできます。
列と行のヘッダーは、ワークシートの displayOptions
の showGridlines
プロパティを使用して、表示と非表示を切り替えることができます。以下のコードは、ワークシートのグリッドラインを非表示にする方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.displayOptions.showGridlines = false ;
ts
ワークシートの displayOptions
の gridlineColor
プロパティを使用して、グリッド線の色を設定できます。以下のコードは、ワークシートのグリッド線を変更する方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.displayOptions.gridlineColor = "Red" ;
ts
ヘッダーの構成
列ヘッダーと行ヘッダーは、列と行を視覚的に特定するために使用します。また、現在選択されているセルやセル領域をハイライト表示する場合にも使用します。
列と行のヘッダーは、ワークシートの displayOptions
の showRowAndColumnHeaders
プロパティを使用して、表示と非表示を切り替えることができます。以下のコードは、列と行ヘッダーを非表示にする方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.displayOptions.showRowAndColumnHeaders = false ;
ts
ワークシートの編集を設定
デフォルトで保存する worksheet
オブジェクトが有効です。worksheet
オブジェクトの protect
メソッドを使用してワークシートを保護することにより、ワークシートの編集を禁止できます。このメソッドは、保護する部分を決定する null 許容型 bool
引数が多くあり、オプションの 1 つは編集オブジェクトを許容し、false に設定した場合はワークシートの編集を防止します。
以下のコードは、ワークシートで編集を無効にする方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.protect();
ts
worksheet
オブジェクトの protect
メソッドを使用して構造変更からワークシートを保護できます。
保護が設定されると、Worksheet オブジェクトの保護をこれらのオブジェクトでオーバーライドするために、cellFormat
オブジェクトの locked
プロパティを各セル、行、マージされたセル領域、または列で設定することができます。たとえば、1 つの列のセルを除き、ワークシートのすべてのセルを読み取り専用にする必要がある場合、特定の WorksheetColumn
オブジェクトで cellFormat
プロパティの locked
を false に設定します。これにより、その列内のセルの編集をユーザーに許可し、ワークシートの他のセルの編集は禁止できます。
以下のコードはその方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.protect();
worksheet.columns(0 ).cellFormat.locked = false ;
ts
ワークシート領域のフィルタリング
フィルタリングは、worksheet
オブジェクトの filterSettings
プロパティから取得できるワークシートの WorksheetFilterSettings
でフィルター条件を設定できます。フィルター条件は、フィルター条件追加、削除、変更される時に、または reapplyFilters
メソッドがワークシートで呼び出されるときに限り再適用されます。フィルターは、領域内で常にデータを評価するわけではありません。
WorksheetFilterSettings
オブジェクトの setRegion
メソッドでフィルターを適用する領域を指定できます。
以下は、フィルターをワークシートに追加するためのメソッド一覧と概要です。
以下のコード スニペットを使用してフィルターをワークシート領域に追加します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.filterSettings.setRegion("Sheet1!A1:A10" );
worksheet.filterSettings.applyAverageFilter(0 , AverageFilterType.AboveAverage);
ts
ペインの固定と分割
ペイン固定機能は、行をワークシートの上または列を左にで固定できます。ユーザーがスクロールしている間、固定した行や列は表示されたままになります。固定された行列は、削除できない実線によってワークシートの残りの部分と区切られます。
ペイン固定を有効にするために worksheet
オブジェクトの displayOptions
の panesAreFrozen
プロパティを true に設定する必要があります。表示オプション frozenPaneSettings
の FrozenRows
と FrozenColumns
プロパティを使用して固定する行列を指定できます。
また FirstRowInBottomPane
と FirstColumnInRightPane
を個々に使用して下ペインの最初の行または右ペインの最初の列を指定できます。
以下のコード スニペットは、ワークシートのペイン機能を固定する方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.displayOptions.panesAreFrozen = true ;
worksheet.displayOptions.frozenPaneSettings.frozenRows = 3 ;
worksheet.displayOptions.frozenPaneSettings.frozenColumns = 1 ;
worksheet.displayOptions.frozenPaneSettings.firstColumnInRightPane = 2 ;
worksheet.displayOptions.frozenPaneSettings.firstRowInBottomPane = 6 ;
ts
ワークシート ズーム レベルの設定
各ワークシートのズーム レベルは、worksheet
オブジェクトの displayOptions
の MagnificationInNormalView
プロパティを使用して個別に変更できます。このプロパティは、10 から 400 の間の値を取得して適用したいズームのパーセンテージを表します。
以下のコードはその方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.displayOptions.magnificationInNormalView = 300 ;
ts
ワークシート レベルのソート
列または行にワークシート レベル オブジェクトでソートの条件を設定することによってソートが実行されます。列または行を昇順または降順にソートすることができます。
これには、シートの sortSettings
プロパティを使用して取得できる worksheet
オブジェクトの WorksheetSortSettings
に領域とソートタイプを指定します。
シートのソート条件は、ソート条件が追加、削除、変更される時に、または reapplySortConditions
メソッドがワークシートで呼び出されるときに限り再適用されます。列または行を領域でソートします。'Rows' はデフォルトのソートタイプです。
以下のコード スニペットは、ワークシートのセル領域を適用する方法を示します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.sortSettings.sortConditions().addItem(new RelativeIndex(0 ), new OrderedSortCondition(SortDirection.Ascending));
ts
ワークシートの保護
worksheet
オブジェクトで protect
メソッドを呼び出してワークシートを保護できます。このメソッドは、以下のユーザー操作を制限または許容する null 許容型 bool
パラメーターを公開します。
セルの編集
図形、コメント、チャートなどのオブジェクトやコントロールを編集します。
シナリオの編集。
データ フィルタリング。
セルの書式設定。
列の挿入、削除、書式設定。
行の挿入、削除、書式設定。
ハイパーリンクの挿入。
データのソート。
ピボット テーブルの使用
worksheet
オブジェクトで unprotect
メソッドを呼び出してワークシートの保護を削除できます。
以下のコード スニペットは、上記にリストされたすべてのユーザー操作を保護を有効にします。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
worksheet.protect();
ts
ワークシートの条件付き書式設定
worksheet
の条件付き書式を設定するには、ワークシートの conditionalFormats
コレクションで公開される多数の Add メソッドを使用できます。この Add メソッドの最初のパラメーターは条件付き書式に適用する Worksheet の string
領域です。
Worksheet に追加可能な条件付き書式にその条件が true の場合に WorksheetCell
要素の外観を決定する cellFormat
プロパティがあります。たとえば、fill
や font
などのこの cellFormat
プロパティにアタッチされるプロパティを使用してセルの背景およびフォント設定を決定できます。
ワークシート セルの可視化の動作が異なるため、cellFormat
プロパティがない条件付き書式もあります。この条件付き書式は DataBarConditionalFormat
、ColorScaleConditionalFormat
、IconSetConditionalFormat
です。
既存の workbook
を Excel から読み込む際に、その workbook
が読み込まれた場合も書式設定は保持されます。workbook
を Excel ファイルに保存する場合も保持されます。
以下のコード例はワークシートの条件付き書式の使用方法を紹介します。
var workbook = new Workbook(WorkbookFormat.Excel2007);
var worksheet = workbook.worksheets().add("Sheet1" );
var color = new Color();
color.colorString = "Red" ;
var format = worksheet.conditionalFormats().addAverageCondition("A1:A10" , FormatConditionAboveBelow.AboveAverage);
format.cellFormat.font.colorInfo = new WorkbookColorInfo(color);
ts
API リファレンス