React 명령어로 작업하기
React Spreadsheet 구성 요소를 사용하면 스프레드시트의 다양한 기능을 활성화하기 위한 명령을 수행할 수 있습니다. 이 주제에서는 명령을 사용하여 컨트롤에서 다양한 작업을 수행하는 방법을 설명합니다. 많은 명령은 활성 셀, 행 또는 워크시트를 기반으로 작업을 수행합니다. 예를 들어 이러한 명령 두 가지는 ZoomIn 및 ZoomOut입니다. 전체 목록은 SpreadsheetAction 열거형을 참조하세요.
React 명령어 작업 예제
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);
}
});
}
}
tsimport React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import { IgrExcelXlsxModule } from "@infragistics/igniteui-react-excel";
import { IgrExcelCoreModule } from "@infragistics/igniteui-react-excel";
import { IgrExcelModule } from "@infragistics/igniteui-react-excel";
import { IgrSpreadsheetModule } from "@infragistics/igniteui-react-spreadsheet";
import { IgrSpreadsheet } from "@infragistics/igniteui-react-spreadsheet";
import { ExcelUtility } from './ExcelUtility';
import { SpreadsheetAction } from "@infragistics/igniteui-react-spreadsheet";
IgrExcelCoreModule.register();
IgrExcelModule.register();
IgrExcelXlsxModule.register();
IgrSpreadsheetModule.register();
export default class SpreadsheetCommands extends React.Component<any, any> {
public spreadsheet: IgrSpreadsheet;
constructor(props: any) {
super(props);
this.onSpreadsheetRef = this.onSpreadsheetRef.bind(this);
this.onCommandClick = this.onCommandClick.bind(this);
}
public render(): JSX.Element {
return (
<div className="container sample">
<div className="options horizontal">
<button className="options-button" id="zoomIn" onClick={this.onCommandClick}>Zoom In</button>
<button className="options-button" id="zoomOut" onClick={this.onCommandClick}>Zoom Out</button>
</div>
<IgrSpreadsheet ref={this.onSpreadsheetRef} height="calc(100% - 25px)" width="100%" />
</div>
);
}
public onCommandClick(e: any) {
const id: string = e.target.id;
switch (id) {
case "zoomIn": {
this.spreadsheet.executeAction(SpreadsheetAction.ZoomIn);
break;
}
case "zoomOut": {
this.spreadsheet.executeAction(SpreadsheetAction.ZoomOut);
break;
}
}
}
public onSpreadsheetRef(spreadsheet: IgrSpreadsheet) {
if (!spreadsheet) { return; }
this.spreadsheet = spreadsheet;
const url = "https://static.infragistics.com/xplatform/excel/SalesData.xlsx";
ExcelUtility.loadFromUrl(url).then((w) => {
this.spreadsheet.workbook = w;
});
}
}
// rendering above class to the React DOM
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<SpreadsheetCommands/>);
tsx
종속성
명령을 사용하기 전에 SpreadsheetAction
가져오고 싶을 것입니다.
import { IgrSpreadsheet } from 'igniteui-react-spreadsheet';
import { SpreadsheetAction } from 'igniteui-react-spreadsheet';
ts
용법
다음 스니펫은 데이터 유효성 검사 규칙을 설정하는 방법을 보여줍니다.
public spreadsheet : IgrSpreadsheet = new IgrSpreadsheet({});
// ...
public zoomIn(): void {
this.spreadsheet.executeAction(SpreadsheetAction.ZoomIn);
}
public zoomOut(): void {
this.spreadsheet.executeAction(SpreadsheetAction.ZoomOut);
}
ts
API 참조
ExecuteAction
SpreadsheetAction