If you want to use range select mode, you just need to create a formulaTextBox that has this option {rangeSelectMode: true}. For example:
You can use the workbook method of FormulaTextBox to attach this formulaTextBox to a spread. For example:
If fbx1.workbook() doesn't have arguments, range select does not work.
You can use the text method of FormulaTextBox to get the text of the formula text box.
You can use the destroy method to remove the formula text box elements.
import { Component, NgModule, enableProdMode } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
import { SpreadSheetsModule } from '@mescius/spread-sheets-angular';
import GC from '@mescius/spread-sheets';
import './styles.css';
@Component({
selector: 'app-component',
templateUrl: 'src/app.component.html'
})
export class AppComponent {
spread: GC.Spread.Sheets.Workbook;
fbx: GC.Spread.Sheets.FormulaTextBox.FormulaTextBox;
hostStyle = {
width: 'calc(100% - 280px)',
height: '100%',
overflow: 'hidden',
float: 'left'
};
constructor() {
}
initSpread($event: any) {
this.spread = $event.spread;
let spread = this.spread;
let sheet = spread.getActiveSheet();
sheet.suspendPaint();
const cfs = sheet.conditionalFormats;
const Range = GC.Spread.Sheets.Range;
let row = 0, col = 1;
sheet.getCell(row, ++col).value("Icon Set").font("700 11pt Calibri");
sheet.addSpan(row, col, 1, 10);
sheet.addSpan(row + 6, col, 1, 10);
row++;
for (let column = col; column < col + 10; column++) {
sheet.getCell(row, column).value(-50);
sheet.getCell(row + 1, column).value(-25);
sheet.getCell(row + 2, column).value(0);
sheet.getCell(row + 3, column).value(25);
sheet.getCell(row + 4, column).value(50);
sheet.getCell(row + 6, column).value(-50);
sheet.getCell(row + 7, column).value(-25);
sheet.getCell(row + 8, column).value(0);
sheet.getCell(row + 9, column).value(25);
sheet.getCell(row + 10, column).value(50);
}
let rowCount = 5;
cfs.addIconSetRule(0, [new Range(row, col, rowCount, 1)]);
cfs.addIconSetRule(1, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(2, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(3, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(4, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(5, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(6, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(7, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(8, [new Range(row, ++col, rowCount, 1)]);
cfs.addIconSetRule(9, [new Range(row, ++col, rowCount, 1)]);
col = 1;
cfs.addIconSetRule(10, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(11, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(12, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(13, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(14, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(15, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(16, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(17, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(18, [new Range(row + 6, ++col, rowCount, 1)]);
cfs.addIconSetRule(19, [new Range(row + 6, ++col, rowCount, 1)]);
sheet.resumePaint();
let fbx = new GC.Spread.Sheets.FormulaTextBox.FormulaTextBox(document.getElementById('formulaBar'), {rangeSelectMode: true});
fbx.workbook(spread);
this.fbx = fbx;
}
getSelectedRangeFormula($event: any) {
document.getElementById('rangeText').textContent = this.fbx.text();
}
}
@NgModule({
imports: [BrowserModule, SpreadSheetsModule],
declarations: [AppComponent],
exports: [AppComponent],
bootstrap: [AppComponent]
})
export class AppModule {}
enableProdMode();
// Bootstrap application with hash style navigation and global services.
platformBrowserDynamic().bootstrapModule(AppModule);
<!doctype html>
<html style="height:100%;font-size:14px;">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="$DEMOROOT$/en/angular/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<!-- Polyfills -->
<script src="$DEMOROOT$/en/angular/node_modules/core-js/client/shim.min.js"></script>
<script src="$DEMOROOT$/en/angular/node_modules/zone.js/fesm2015/zone.min.js"></script>
<!-- SystemJS -->
<script src="$DEMOROOT$/en/angular/node_modules/systemjs/dist/system.js"></script>
<script src="systemjs.config.js"></script>
<script>
// workaround to load 'rxjs/operators' from the rxjs bundle
System.import('rxjs').then(function (m) {
System.import('@angular/compiler');
System.set(SystemJS.resolveSync('rxjs/operators'), System.newModule(m.operators));
System.import('$DEMOROOT$/en/lib/angular/license.ts');
System.import('./src/app.component');
});
</script>
</head>
<body>
<app-component></app-component>
</body>
</html>
<div class="sample-tutorial">
<gc-spread-sheets [hostStyle]="hostStyle" (workbookInitialized)="initSpread($event)">
<gc-worksheet>
</gc-worksheet>
</gc-spread-sheets>
<div class="options-container">
<div class="top-options">
<p>Click the icon of the rangeSelector, then select a range, then Click the 'Get Value' button.This can be useful for providing users the ability to select ranges for their formulas rather than manually typing them.</p>
<div id="formulaBar" spellcheck="false"
style="border: 1px solid #808080;width:100%;"></div>
</div>
<div class="options-row" style="margin-top: 10px">
<input type="button" id="getValue" value="Get Value" style=" font-size: 14px; height: 30px" (click)="getSelectedRangeFormula($event)" />
<label>
Range Text: <span id="rangeText"
style="border: 0px; outline: none; font-size: 14px;padding: 0px"></span>
</label>
</div>
</div>
</div>
.sample-tutorial {
position: relative;
height: 100%;
overflow: hidden;
}
.options-container {
float: right;
width: 280px;
padding: 12px;
height: 100%;
box-sizing: border-box;
background: #fbfbfb;
overflow: auto;
}
.option-row {
font-size: 14px;
padding: 5px;
margin-top: 10px;
}
input, select {
width: 100%;
padding: 4px, 8px;
margin: 8px 0;
box-sizing: border-box;
}
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
(function (global) {
System.config({
transpiler: 'ts',
typescriptOptions: {
tsconfig: true
},
meta: {
'typescript': {
"exports": "ts"
},
'*.css': { loader: 'css' }
},
paths: {
// paths serve as alias
'npm:': 'node_modules/'
},
// map tells the System loader where to look for things
map: {
'core-js': 'npm:core-js/client/shim.min.js',
'zone': 'npm:zone.js/fesm2015/zone.min.js',
'rxjs': 'npm:rxjs/dist/bundles/rxjs.umd.min.js',
'@angular/core': 'npm:@angular/core/fesm2022',
'@angular/common': 'npm:@angular/common/fesm2022/common.mjs',
'@angular/compiler': 'npm:@angular/compiler/fesm2022/compiler.mjs',
'@angular/platform-browser': 'npm:@angular/platform-browser/fesm2022/platform-browser.mjs',
'@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/fesm2022/platform-browser-dynamic.mjs',
'@angular/common/http': 'npm:@angular/common/fesm2022/http.mjs',
'@angular/router': 'npm:@angular/router/fesm2022/router.mjs',
'@angular/forms': 'npm:@angular/forms/fesm2022/forms.mjs',
'jszip': 'npm:jszip/dist/jszip.min.js',
'typescript': 'npm:typescript/lib/typescript.js',
'ts': './plugin.js',
'tslib':'npm:tslib/tslib.js',
'css': 'npm:systemjs-plugin-css/css.js',
'plugin-babel': 'npm:systemjs-plugin-babel/plugin-babel.js',
'systemjs-babel-build':'npm:systemjs-plugin-babel/systemjs-babel-browser.js',
'@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js',
'@mescius/spread-sheets-angular': 'npm:@mescius/spread-sheets-angular/fesm2020/mescius-spread-sheets-angular.mjs',
'@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js'
},
// packages tells the System loader how to load when no filename and/or no extension
packages: {
src: {
defaultExtension: 'ts'
},
rxjs: {
defaultExtension: 'js'
},
"node_modules": {
defaultExtension: 'js'
},
"node_modules/@angular": {
defaultExtension: 'mjs'
},
"@mescius/spread-sheets-angular": {
defaultExtension: 'mjs'
},
'@angular/core': {
defaultExtension: 'mjs',
main: 'core.mjs'
}
}
});
})(this);