Legend :
The first column represents the state.
The second column represents the winner margin in the last eleven elections, from 1976 to 2016.
It uses the Column Sparkline, red color represents GOP, and blue color represents DNC.
The third column represents the forecasted vote share for DNC.
It uses a formula rule, highlight color represents more than 50%.
The fourth column represents the forecasted vote share for GOP.
It uses a formula rule, highlight color represents more than 50%.
The fifth column represents the difference of the forecasted vote share between the two parties.
It uses the Vari Sparkline, red color represents GOP, and blue color represents DNC.
window.onload = function () {
var spread = new GC.Spread.Sheets.Workbook(document.getElementById("ss"), { sheetCount: 0 });
initSpread(spread);
};
function initSpread(spread) {
spread.suspendPaint();
spread.options.autoFitType = GC.Spread.Sheets.AutoFitType.cellWithHeader;
//init a data manager
var dataManager = spread.dataManager();
//add product table
var myTable = dataManager.addTable("myTable", {
remote: {
read: {
url: "$DEMOROOT$/spread/source/data/2020-election-results.json"
}
},
schema: {
dataPath: "2020-election-data"
}
});
//init a table sheet
var sheet = spread.addSheetTab(0, "TableSheet1", GC.Spread.Sheets.SheetType.tableSheet);
sheet.options.allowAddNew = false;
sheet.actionColumn.options({ visible: false }); //hide action column
sheet.setDefaultRowHeight(40, GC.Spread.Sheets.SheetArea.colHeader);
sheet.setDefaultRowHeight(35);
sheet.options.alternatingRowOptions = null;
//bind a view to the table sheet
var normalStyle = { vAlign: "center" };
var style = { vAlign: "center", wordWrap: true, hAlign:"center" };
var redRule = {
ruleType: "formulaRule",
formula: 'VALUE(LEFT(@,FIND("%",@)-1))>50',
style: { backColor: "#e45d5d", foreColor: "white", hAlign:"center" }
};
var blueRule = {
ruleType: "formulaRule",
formula: 'VALUE(LEFT(@,FIND("%",@)-1))>50',
style: { backColor: "#4f9bed", foreColor: "white" , hAlign:"center"}
};
var myView = myTable.addView("myView", [
{ value: "State", width: 130, style: normalStyle},
{ value: '=COLUMNSPARKLINE([@past_elections],1,,,"{sc:#e45d5d,sn:true,nc:#4f9bed,dh:true,dxa:true}")', caption: "Winner margin in the last eleven elections", width: 200 },
{ value: '=CONCAT(TEXT([@[Forecast GOP %]], "00.0%"), "\n", TEXT([@[Forecast GOP Low]], "00.0%"), "-", TEXT([@[Forecast GOP High]], "00.0%"))', caption: "Forecasted vote share for GOP", width: 200, style: style, conditionalFormats: [redRule] },
{ value: '=CONCAT(TEXT([@[Forecast DNC]], "00.0%"), "\n", TEXT([@[Forecast DNC Low]], "00.0%"), "-", TEXT([@[Forecast DNC High]], "00.0%"))', caption: "Forecasted vote share for DNC", width: 200, style: style, conditionalFormats: [blueRule] },
{ value: '=VARISPARKLINE([@[Winner Margin]],0,,,,,TRUE,"#e45d5d","#4f9bed")', caption: "Difference", width: 200, style: normalStyle },
]);
myView.fetch().then(function () {
sheet.setDataView(myView);
});
spread.resumePaint();
}
<!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/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<!-- Promise Polyfill for IE, https://www.npmjs.com/package/promise-polyfill -->
<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js"></script>
<script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/en/purejs/node_modules/@mescius/spread-sheets-tablesheet/dist/gc.spread.sheets.tablesheet.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="styles.css">
</head>
<body>
<div class="sample-tutorial">
<div id="ss" class="sample-spreadsheets"></div>
<div id="optionContainer" class="optionContainer">
</div>
</div>
</html>
.sample-tutorial {
position: relative;
height: 100%;
overflow: hidden;
}
body {
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
}
.sample-spreadsheets {
width: 100%;
height: 100%;
overflow: hidden;
float: left;
}