Skip to content

Instantly share code, notes, and snippets.

View ismaelc's full-sized avatar

Chris Ismael ismaelc

View GitHub Profile
let book = context.workbook
let selectedRange = book.getSelectedRange()
let usedRange = book.worksheets
.getActiveWorksheet()
.getUsedRange();
selectedRange.load("address");
usedRange.load("address");
await context.sync();
export async function captureRange() {
try {
await Excel.run(async context => {
let book = context.workbook
let selectedRange = book.getSelectedRange()
let usedRange = book.worksheets
.getActiveWorksheet()
.getUsedRange();
selectedRange.load("address");
usedRange.load("address");
import Classifier from 'ml-classify-text'
let processedData = []
let classifier = {}
//document.getElementById("run").onclick = run;
document.getElementById("capture").onclick = captureRange;
document.getElementById("predict").onclick = predictRange;
<body class="ms-font-m ms-welcome ms-Fabric">
<section id="sideload-msg" class="ms-welcome__main">
<h2 class="ms-font-xl">Please sideload your add-in to see app body.</h2>
</section>
<main id="app-body" class="ms-welcome__main" style="display: none;">
<div role="button" id="capture" class="ms-welcome__action ms-Button ms-Button--hero ms-font-xl">
<span class="ms-Button-label">Capture training data</span>
</div>
<div role="button" id="predict" class="ms-welcome__action ms-Button ms-Button--hero ms-font-xl">
<span class="ms-Button-label">Predict</span>
// Formats data into key:array
function processData(arrayData) {
let processed = {};
for (let [i, [text, label]] of arrayData.entries()) {
// TODO: Deal with headers
if (i == 0 && this.excludeFirstRow) continue;
// Do not add empty rows
if (text.trim() == '' || label.trim() == '') continue;
// Deal with column vs range select
function resolveRange(sheet) {
let range = sheet.getActiveRange().getA1Notation();
let [first, second] = range.split(':')
if (!/\d/.test(second)) {
range = `${first}1:${second}${sheet.getLastRow()}`
}
return range
}
@ismaelc
ismaelc / Code.js
Created February 2, 2021 05:20
Complete Apps Script Google Sheets code for ml-classify-text-js
// Import ml-classify-text
eval(UrlFetchApp.fetch('https://cdn.jsdelivr.net/npm/ml-classify-text@2.0.0/lib/index.js').getContentText());
let classifier = new Classifier()
// Add menu items
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('ML Train Menu')
.addItem('Get training set', 'captureRange')
.addItem('Predict', 'predictRange')
// Predict
let predicted = []
for (let [text, prediction] of data) {
let predictions = classifier.predict(text);
if (predictions.length) {
prediction = predictions[0].label
}
predicted.push([text, prediction]);
}
// Get selected range and data
let sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
let resolved = this.resolveRange(sheet)
let range = sheet.getRange(resolved)
var data = range.getValues();