Text Orientation

Text in spreadsheets can be rotated by different degrees in SpreadJS. Excel spreadsheets can be imported and exported while keeping their text rotation, and developers can utilize JavaScript code to set rotation and even vertical text for cells in the workbook.

Description
app.jsx
app-func.jsx
app-class.jsx
index.html
styles.css
Copy to CodeMine

You can create a style and set a rotation using textOrientation as follows:

    var style = new GC.Spread.Sheets.Style();
    style.textOriention = 30;

The rotation angle supports -90 to +90 degrees.

When setting the rotation on a cell value the border and background color will rotate to the corresponding angle.

You can create a style and set a rotation using textOrientation as follows: The rotation angle supports -90 to +90 degrees. When setting the rotation on a cell value the border and background color will rotate to the corresponding angle.
import * as React from 'react'; import * as ReactDOM from 'react-dom'; import './styles.css'; import { AppFunc } from './app-func'; // import { App } from './app-class'; // 1. Functional Component sample ReactDOM.render(<AppFunc />, document.getElementById('app')); // 2. Class Component sample // ReactDOM.render(<App />, document.getElementById('app'));
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import { SpreadSheets } from '@mescius/spread-sheets-react'; let spread = null; export function AppFunc() { const [textOriention, setTextOriention] = React.useState(0); const textOrientionChange = (e) => { let value = parseInt(e.target.value); setTextOriention(isNaN(value) ? undefined : value); } const setVerticalText = () => { let sheet = spread.getActiveSheet(); if (sheet) { let cell = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex()); cell.isVerticalText(!cell.isVerticalText()); } } const setTextOrientionForSpread = () => { let sheet = spread.getActiveSheet(); if (sheet) { let cell = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex()); let rotationValue = textOriention; if(-90 <= rotationValue && rotationValue <= 90){ cell.textOrientation(rotationValue); } else { alert("please input correct rotation angle") } } } const initSpread = (currSpread) => { spread = currSpread; spread.fromJSON(jsonData); let sheet = spread.getSheet(3); sheet.getCell(0, 2).textDecoration(GC.Spread.Sheets.TextDecorationType.lineThrough); sheet.getCell(0, 3).textDecoration(GC.Spread.Sheets.TextDecorationType.overline); sheet.getCell(0, 4).textDecoration(GC.Spread.Sheets.TextDecorationType.underline); } return ( <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={initSpread}> </SpreadSheets> </div> <div class="options-container"> <div class="option-row"> <p>Select a cell, such as G5 (“Math”), then change the Angle to ‘30’</p> <label id="Text Oriention" for="textOriention">{'Angle(-90<= Angle <=90)'}</label> <input type="text" id="textOriention" value={textOriention} onChange={textOrientionChange} /> <input type="button" value="Set TextOriention" id="btnTextOriention" onClick={setTextOrientionForSpread} /> </div> <div class="option-row"> <label id="Text Oriention" for="textOriention">Set VerticalText</label> <input type="button" value="Set verticalText" id="btnVerticalText" onClick={setVerticalText} /> </div> </div> </div> ); }
import * as React from 'react'; import GC from '@mescius/spread-sheets'; import { SpreadSheets } from '@mescius/spread-sheets-react'; const Component = React.Component; export class App extends Component { constructor(props) { super(props); this.spread = null; this.state = { textOriention: 0 } } render() { return ( <div class="sample-tutorial"> <div class="sample-spreadsheets"> <SpreadSheets workbookInitialized={spread => this.initSpread(spread)}> </SpreadSheets> </div> <div class="options-container"> <div class="option-row"> <p>Select a cell, such as G5 (“Math”), then change the Angle to ‘30’</p> <label id="Text Oriention" for="textOriention">{'Angle(-90<= Angle <=90)'}</label> <input type="text" id="textOriention" value={this.state.textOriention} onChange={(e) => { this.textOrientionChange(e) }} /> <input type="button" value="Set TextOriention" id="btnTextOriention" onClick={() => { this.setTextOriention() }} /> </div> <div class="option-row"> <label id="Text Oriention" for="textOriention">Set VerticalText</label> <input type="button" value="Set verticalText" id="btnVerticalText" onClick={() => { this.setVerticalText() }} /> </div> </div> </div> ) } textOrientionChange(e) { let value = parseInt(e.target.value); if(!isNaN(value)){ this.setState(() => ({ textOriention: value })); }else{ this.setState(() => ({ textOriention: undefined })); } } setVerticalText() { let sheet = this.spread.getActiveSheet(); if (sheet) { let cell = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex()); cell.isVerticalText(!cell.isVerticalText()); } } setTextOriention() { let sheet = this.spread.getActiveSheet(); if (sheet) { let cell = sheet.getCell(sheet.getActiveRowIndex(), sheet.getActiveColumnIndex()); let rotationValue = this.state.textOriention; if(-90 <= rotationValue && rotationValue <= 90){ cell.textOrientation(rotationValue); } else { alert("please input correct rotation angle") } } } initSpread(spread) { this.spread = spread; spread.fromJSON(jsonData); let sheet = spread.getSheet(3); sheet.getCell(0, 2).textDecoration(GC.Spread.Sheets.TextDecorationType.lineThrough); sheet.getCell(0, 3).textDecoration(GC.Spread.Sheets.TextDecorationType.overline); sheet.getCell(0, 4).textDecoration(GC.Spread.Sheets.TextDecorationType.underline); } }
<!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/react/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- SystemJS --> <script src="$DEMOROOT$/en/react/node_modules/systemjs/dist/system.src.js"></script> <script src="$DEMOROOT$/spread/source/data/textOriention.js" type="text/javascript"></script> <script src="systemjs.config.js"></script> <script> System.import('$DEMOROOT$/en/lib/react/license.js').then(function () { System.import('./src/app'); }); </script> </head> <body> <div id="app" style="height: 100%;"></div> </body> </html>
.sample-tutorial { position: relative; height: 100%; overflow: hidden; } .sample-spreadsheets { width: calc(100% - 280px); height: 100%; overflow: hidden; float: left; } .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; } label { display: block; margin-bottom: 6px; } input { padding: 4px 6px; } input[type=button] { margin-top: 6px; display: block; } body { position: absolute; top: 0; bottom: 0; left: 0; right: 0; }
(function (global) { System.config({ transpiler: 'plugin-babel', babelOptions: { es2015: true, react: true }, meta: { '*.css': { loader: 'css' } }, paths: { // paths serve as alias 'npm:': 'node_modules/' }, // map tells the System loader where to look for things map: { '@mescius/spread-sheets': 'npm:@mescius/spread-sheets/index.js', '@mescius/spread-sheets-react': 'npm:@mescius/spread-sheets-react/index.js', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js', 'react': 'npm:react/umd/react.production.min.js', 'react-dom': 'npm:react-dom/umd/react-dom.production.min.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' }, // packages tells the System loader how to load when no filename and/or no extension packages: { src: { defaultExtension: 'jsx' }, "node_modules": { defaultExtension: 'js' }, } }); })(this);