150 lines
4.8 KiB
JavaScript
150 lines
4.8 KiB
JavaScript
|
// SCRIPTS FOR USE WITH THE GOOGLE SHEETS APP SCRIPT
|
|||
|
|
|||
|
// Adds a unix timestamp to each word on creation for unique id keeping
|
|||
|
function onEdit(e) {
|
|||
|
var sheet = e.source.getActiveSheet();
|
|||
|
if (sheet.getName() === "Dictionary") {
|
|||
|
var actRng = sheet.getActiveRange();
|
|||
|
var editColumn = actRng.getColumn();
|
|||
|
var rowIndex = actRng.getRowIndex();
|
|||
|
var dateCol = 1;
|
|||
|
var orderCol = 3;
|
|||
|
if (editColumn == orderCol) {
|
|||
|
sheet.getRange(rowIndex, dateCol).setValue(new Date().getTime());
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function onOpen() {
|
|||
|
var menuEntries = [
|
|||
|
{name: "Go to Cell", functionName: "goToCell"},
|
|||
|
{name: "Go to Row", functionName: "goToRow"},
|
|||
|
{name: "Go to 1st empty Row", functionName: "selectFirstEmptyRow"},
|
|||
|
{name: "Expand Part of Speech Abbreviations", functionName: "expandPartsOfSpeech"},
|
|||
|
{name: "Standardize Pashto", functionName: "standardizePashtoColumns"},
|
|||
|
{name: "Standardize Phonetics", functionName: "standardizePhonetics"},
|
|||
|
{name: "Find Unlinked Compound Verb", functionName: "selectUnlinkedCompound"},
|
|||
|
];
|
|||
|
SpreadsheetApp.getActiveSpreadsheet().addMenu("MyUtils", menuEntries);
|
|||
|
}
|
|||
|
|
|||
|
function standardizePashtoText(input) {
|
|||
|
return input.trim().replace(/\u0649/g, "\u06cc")
|
|||
|
// Arabic ك replace with ک
|
|||
|
.replace(/\u0643/g, "\u06a9")
|
|||
|
// Farsi گ replaced with ګ
|
|||
|
.replace(/گ/g, "ګ")
|
|||
|
// Replace ي s in the middle of words to ی
|
|||
|
.replace(/ي(?=[\u0600-\u060b\u060d-\u06ff])/g, "ی")
|
|||
|
// Replace آ two character version with combined آ character
|
|||
|
.replace(/آ/g, "آ");
|
|||
|
}
|
|||
|
|
|||
|
var pashtoColumns = ["J", "L", "O", "Q", "S", "U", "W", "Y", "AA"];
|
|||
|
var phoneticsColumns = ["K","M", "P", "R", "T", "V", "X", "Z", "AB"];
|
|||
|
|
|||
|
function standardizePashtoColumns() {
|
|||
|
for(var h=0;h<pashtoColumns.length;h++) {
|
|||
|
var rng = SpreadsheetApp.getActiveSheet().getRange(pashtoColumns[h]+":"+pashtoColumns[h]);
|
|||
|
var rngA = rng.getValues();
|
|||
|
for(var i=1;i<rngA.length;i++) {
|
|||
|
if (rngA[i][0]) {
|
|||
|
rngA[i][0] = standardizePashtoText(rngA[i][0]);
|
|||
|
}
|
|||
|
}
|
|||
|
rng.setValues(rngA);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function expandPartsOfSpeech() {
|
|||
|
const rng = SpreadsheetApp.getActiveSheet().getRange("E:E");
|
|||
|
const rngA = rng.getValues();
|
|||
|
for(var i=1;i<rngA.length;i++) {
|
|||
|
rngA[i][0] = rngA[i][0].replace(/tr\./g, "trans.");
|
|||
|
rngA[i][0] = rngA[i][0].replace(/int\./g, "intrans.");
|
|||
|
rngA[i][0] = rngA[i][0].replace(/sc\./g, "stat. comp.");
|
|||
|
rngA[i][0] = rngA[i][0].replace(/dc\./g, "dyn. comp.");
|
|||
|
}
|
|||
|
rng.setValues(rngA);
|
|||
|
}
|
|||
|
|
|||
|
function standardizePhonetics() {
|
|||
|
for(var h=0;h<phoneticsColumns.length;h++) {
|
|||
|
const rng = SpreadsheetApp.getActiveSheet().getRange(phoneticsColumns[h]+":"+phoneticsColumns[h]);
|
|||
|
const rngA = rng.getValues();
|
|||
|
for(var i=1;i<rngA.length;i++) {
|
|||
|
rngA[i][0] = rngA[i][0].replace(/’/g, "'").trim();
|
|||
|
}
|
|||
|
rng.setValues(rngA);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function goToCell() {
|
|||
|
var strRange = Browser.inputBox("Insert the required cell (e.g.: B351):", Browser.Buttons.OK_CANCEL);
|
|||
|
if(strRange != "cancel") {
|
|||
|
try {
|
|||
|
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
|
|||
|
}
|
|||
|
catch(e) {Browser.msgBox(e.message);}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function goToRow() {
|
|||
|
var strRange = Browser.inputBox("Insert the required row number (e.g.: 132):", Browser.Buttons.OK_CANCEL);
|
|||
|
if(strRange != "cancel") {
|
|||
|
try {
|
|||
|
strRange = "A" + strRange
|
|||
|
SpreadsheetApp.getActiveSheet().getRange(strRange).activate();
|
|||
|
}
|
|||
|
catch(e) {
|
|||
|
Browser.msgBox(e.message);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
function selectFirstEmptyRow() {
|
|||
|
var sheet = SpreadsheetApp.getActiveSpreadsheet();
|
|||
|
sheet.setActiveSelection(sheet.getRange("A"+getFirstEmptyRowWholeRow()));
|
|||
|
}
|
|||
|
|
|||
|
function selectUnlinkedCompound() {
|
|||
|
var sheet = SpreadsheetApp.getActiveSpreadsheet();
|
|||
|
sheet.setActiveSelection(sheet.getRange("F"+getFirstUnlinkedCompound()));
|
|||
|
}
|
|||
|
|
|||
|
function getFirstUnlinkedCompound() {
|
|||
|
var sheet = SpreadsheetApp.getActiveSheet();
|
|||
|
var range = sheet.getDataRange();
|
|||
|
var values = range.getValues();
|
|||
|
var row = 0;
|
|||
|
function linkExists(link) {
|
|||
|
for (var r=0; r<values.length; r++) {
|
|||
|
if (link === values[r][0]) return true;
|
|||
|
}
|
|||
|
return false;
|
|||
|
}
|
|||
|
for (var row=0; row<values.length; row++) {
|
|||
|
var ps = values[row][4];
|
|||
|
if ((typeof ps === "string") && ps.indexOf("comp.")>-1) {
|
|||
|
// check if there is a link to another word on the compound word
|
|||
|
var linkToWord = values[row][5];
|
|||
|
if (!linkToWord) break;
|
|||
|
// check if the link is valid
|
|||
|
if (!linkExists(linkToWord)) return row+1;
|
|||
|
};
|
|||
|
}
|
|||
|
return row+1;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
function getFirstEmptyRowWholeRow() {
|
|||
|
var sheet = SpreadsheetApp.getActiveSheet();
|
|||
|
var range = sheet.getDataRange();
|
|||
|
var values = range.getValues();
|
|||
|
var row = 0;
|
|||
|
for (var row=0; row<values.length; row++) {
|
|||
|
if (!values[row].join("")) break;
|
|||
|
}
|
|||
|
return (row+1);
|
|||
|
}
|