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.vue
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.
<template> <div class="sample-tutorial"> <gc-spread-sheets class="sample-spreadsheets" @workbookInitialized="initSpread"> </gc-spread-sheets> <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" v-model="textOriention" v-on:change="textOrientionChange" /> <input type="button" value="Set TextOriention" id="btnTextOriention" v-on:click="setTextOriention" /> </div> <div class="option-row"> <label id="Text Oriention" for="textOriention">Set VerticalText</label> <input type="button" value="Set verticalText" id="btnVerticalText" v-on:click="setVerticalText"/> </div> </div> </div> </template> <script> import Vue from 'vue'; import '@mescius/spread-sheets-vue' import GC from '@mescius/spread-sheets'; import './styles.css'; let App = Vue.extend({ name: "app", data: function() { return { textOriention: 0, spread: null }; }, methods:{ textOrientionChange(e) { this.textOriention = parseInt(e.target.value); }, 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.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); } } }); new Vue({ render: h => h(App) }).$mount('#app'); </script>
<!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/vue/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css"> <!-- SystemJS --> <script src="$DEMOROOT$/en/vue/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('./src/app.vue'); System.import('$DEMOROOT$/en/lib/vue/license.js'); </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 }, meta: { '*.css': { loader: 'css' }, '*.vue': { loader: 'vue-loader' } }, 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-vue': 'npm:@mescius/spread-sheets-vue/index.js', '@grapecity/jsob-test-dependency-package/react-components': 'npm:@grapecity/jsob-test-dependency-package/react-components/index.js', 'jszip': 'npm:jszip/dist/jszip.js', 'css': 'npm:systemjs-plugin-css/css.js', 'vue': 'npm:vue/dist/vue.min.js', 'vue-loader': 'npm:systemjs-vue-browser/index.js', 'tiny-emitter': 'npm:tiny-emitter/index.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: 'js' }, rxjs: { defaultExtension: 'js' }, "node_modules": { defaultExtension: 'js' } } }); })(this);