Ефективните мениджъри знаят, че времето е ограничителният фактор ... Нищо друго, може би, не отличава ефективните мениджъри толкова, колкото тяхната нежна грижа за времето.
Питър Дракър
Времето е нашият най-ценен ресурс. Искаме да го похарчим за дейности с най-голямо въздействие и за увеличаване на стойността, които можем, не само защото те обикновено носят най-високата парична стойност, но и непрекъснато да се предизвикваме и да увеличим максимално удовлетворението си от работата.
Има много начини да подобрите ефективността и производителността си, за да използвате по-добре времето си. В предишна статия за Google Таблици , Разясних как силата на онлайн сътрудничеството е един такъв ключ към повишената производителност.
В друга статия демонстрирах как Python езикът за програмиране може да бъде мощен инструмент за анализ и автоматизация на задачи за финансови специалисти.
Вдъхновявайки се от това, сега искам да представя урок за Google Apps Script. Google Apps Script ви позволява да пишете скриптове и програми в JavaScript, за да автоматизирате, свързвате и разширявате продуктите в G Suite на Google, включително Таблици, Документи, Презентации, Gmail, Диск и няколко други. Научаването му изисква инвестиция във времето, както и писането на скриптове, но производителността се увеличава и допълнителните възможности, които тя отваря, си заслужават.
какво означава материален дизайн
Като първа стъпка, нека започнем, като разгледаме позната концепция: макроси.
Ако сте прекарали значително време в работа с Excel, тогава в даден момент сте длъжни да влезете в контакт с макроинтерфейса на VBA (Visual Basic for Applications) на Excel. Или чрез записване или записване сами или чрез копиране на създадени от други.
Макросите са чудесен начин за автоматизиране на повтарящи се и досадни работни процеси. VBA може да не е език, на който сте отделили много време за учене, но неговата красота е, че всъщност не е трябвало, за да станете продуктивни и да създадете свои собствени макроси. Можете просто да запишете работния процес, който искате да автоматизирате, и след това да влезете в кода и да направите каквито и да са малки промени, за да направите макроса по-общ.
В някои отношения VBA е страхотен и забравен урок за това как да въведете нетехнически хора в кодирането . Начинът, по който можете да записвате действия и след това да попълните кода за по-нататъшен преглед, наистина е далеч по-прагматичен начин за учене чрез четене на учебници и пасивно гледане на уроци.
Същата функционалност за запис на VBA е налична в Google Sheets. Ето един прост пример за това как да го използвате:
Нека започнем с някои примерни данни, като използваме IMPORTHTML заявка за импортиране на таблица. В този пример изтеглих списък от Уикипедия с 15-те най-големи хедж фонда в света. От само себе си се разбира, но това е произволен пример; намерението е да се съсредоточите повече върху приложението, над темата.
Процесът на запис на макрос се инициира чрез следния път на менюто: Инструменти> Макроси> Запис на макрос.
След това преминаваме през действията (PC формат), които искаме да запишем:
След като приключите, натиснете бутона Save на прозореца на макроса в долната част, дайте му име и незадължителна клавишна комбинация.
За по-прости действия, които могат да бъдат реплицирани точно чрез същите тези стъпки, процесът ще завърши тук и можете веднага да започнете да използвате вашия макрос. В този случай обаче трябва да направим някои промени, преди кодът да бъде използваем. Например листът, в който копираме, ще трябва да има различно име всеки път. Нека да видим как да направите това.
Сега ще видим костите на Google Apps Script за първи път; платформата за програмиране, която работи на сървърите на Google. Това задвижва нашите макроси и ви позволява да създавате много сложни работни потоци и дори добавки за самите приложения. Той може да се използва за автоматизиране не само на работа с електронни таблици, но всъщност на почти всичко, свързано в рамките на G Suite на Google.
Езикът за програмиране на Apps Script е JavaScript , един от най-популярните езици за програмиране, което означава, че има богат ресурс за всеки, който иска да научи широко. Но, точно както при VBA, всъщност не е нужно: можете да използвате същата функционалност за запис и просто да направите стъпките, които искате да можете да повторите автоматично. Резултатът от записа може да изглежда груб и най-вероятно няма да съвпада идеално с това, което искате да свършите, но ще осигури достатъчно солидна отправна точка. Нека сега го направим за сценария, който току-що записахме.
Когато записвате, има смисъл да внимавате да не записвате случайно никакви допълнителни стъпки, които не искате да бъдат заснети в окончателния запис, но понякога е трудно да се избегне: нещо толкова просто като избор на друга клетка, преди да натиснете Stop Бутонът за запис ще бъде заснет и впоследствие повторен всеки път, когато стартирате скрипта. Първата стъпка при редактиране на нашия скрипт би била да го почистим и премахнем всякакви такива стъпки. Нека да се потопим, като отидем в Tools> Script editor в менюто на файла.
Ако знаете JavaScript, веднага ще разпознаете това и може би ще се изненадате да видите ключовата дума „var“ вместо „let“ или „const“, както бихте виждали в съвременния JavaScript. Това отразява факта, че версията на JavaScript в Apps Script е доста стар и не поддържа много от по-новите функции на езика. Към края обаче ще въведа заобиколно решение за тези, които биха искали да използват най-новите езикови функции.
Когато стартирате скрипта за първи път, той ще поиска разрешение, което има смисъл, тъй като скриптовете могат да модифицират (и потенциално да изтрият) всички ваши данни. Най-вероятно ще разпознаете процеса на упълномощаване от други продукти на Google.
Сега можем да започнем да модифицираме кода. Промените, които трябва да направим, са незначителни, но ако направите това за първи път, може все пак да се наложи бързо търсене в скрипта за приложения на Sheets документация и / или бързо търсене на концепция на JavaScript, като например работа с дати. Тук фактът, че JavaScript е толкова широко разпространен език, е полезен: Решение за какъвто и проблем да се сблъскате или функционалност ви дойде на ум обикновено може да бъде намерено бързо, ако формулирате думата си за търсене по ясен начин.
Промените, направени в тази версия на скрипта от оригиналната записана версия, са, че вместо твърдо кодираното име за новия лист, който създаваме, сега го наричаме с днешна дата. В допълнение, ние също променяме пътя на копиране в края, за да се позовем на този нов лист. Последните четири реда също демонстрират как да извършвате някои операции за форматиране, като промяна на стойността на клетка, преоразмеряване на колони и скриване на решетъчни линии.
function createSnapshot() { var spreadsheet = SpreadsheetApp.getActive(); var date = new Date().toISOString().slice(0,10); var destination = spreadsheet.insertSheet(date); spreadsheet.getRange('HTML!A1:F1').activate(); spreadsheet.getSelection() .getNextDataRange(SpreadsheetApp.Direction.DOWN) .activate(); spreadsheet.getActiveRange() .copyTo(SpreadsheetApp.setActiveSheet(destination) .getRange(1,1), SpreadsheetApp.CopyPasteType.PASTE_VALUES,false); var sheet = spreadsheet.setActiveSheet(destination) sheet.getRange('D1').setValue('AUM $bn') sheet.setHiddenGridlines(true); sheet.getRange('A1:D1').setFontWeight('bold'); sheet.autoResizeColumns(1, 4); };
Стартирането на скрипта сега ще покаже, че новият лист наистина е наименуван с днешната дата и съдържа информацията, копирана като стойности (а не формули) от основния лист.
Визуализациите на диаграми вече могат да се добавят чрез същия процес на запис. Използвах това, за да създам три прости графики.
Почистването на кода за всеки ще изглежда по следния начин:
function createColumnChart() { var spreadsheet = SpreadsheetApp.getActive(); spreadsheet.getRange('C1:D16').activate(); var sheet = spreadsheet.getActiveSheet(); chart = sheet.newChart() .asColumnChart() .addRange(spreadsheet.getRange('B1:D16')) .setMergeStrategy(Charts.ChartMergeStrategy.MERGE_COLUMNS) .setTransposeRowsAndColumns(false) .setNumHeaders(-1) .setHiddenDimensionStrategy(Charts.ChartHiddenDimensionStrategy.IGNORE_BOTH) .setOption('useFirstColumnAsDomain', true) .setOption('curveType', 'none') .setOption('domainAxis.direction', 1) .setOption('isStacked', 'absolute') .setOption('series.0.color', '#0b5394') .setOption('series.0.labelInLegend', 'AUM $bn') .setPosition(19, 6, 15, 5) .build(); sheet.insertChart(chart); };
Отново, не се притеснявайте, ако някои от опциите изглеждат объркващи: всичко това се генерира автоматично, просто трябва да разберете достатъчно, за да премахнете ненужните стъпки и може би да направите малки ощипвания по-късно.
Всичко вече започва да се оформя, но какво, ако действителният изход, който искаме, не е електронна таблица, а презентация? Ако случаят е такъв, тогава по-голямата част от работата тук може да е все още ръчна и не сме спестили много време, ако трябва да правим това периодично.
Нека сега изследваме как може да изглежда автоматизирането на създаването на презентация, като използваме примерните данни от нашата електронна таблица.
Това упражнение сега става по-напреднало поради две причини:
Този следващ пример има за цел да предостави някои основни градивни елементи, за да започнете и да се запознаете.
Като начало, нека създадем шаблон, който по-късно искаме да запълним със съдържание, използвайки нашия скрипт. Ето два прости слайда за презентации, които събрах:
След това ще трябва да получите идентификатора на този шаблон, защото ще трябва да се позовете на него във вашия скрипт. Подсъзнателно ще сте виждали този идентификатор много пъти, защото всъщност това е произволно изглеждащата последователност от символи и числа, които виждате в URL адреса на вашия браузър:
https://docs.google.com/presentation/p/ this_is_your_presentation_ID /edit#slide=id.p.
Сега трябва да добавим следните редове към оригиналния ни скрипт. Това отново ще поиска упълномощаване, този път за достъп до вашия Google Диск.
function createPresentation() { var templateId = 'insert_your_template_presentation_id_here'; var template = DriveApp.getFileById(templateId); var copy = template.makeCopy('Weekly report ' + date).getId(); var presentation = SlidesApp.openById(copy); }
Няма да видите незабавна визуална обратна връзка, ако стартирате този кодов фрагмент, но ако погледнете в папката на Google Drive, където сте съхранили шаблона, ще откриете, че копие от него наистина е създадено и има днешния дата в името на файла. Започнахме добре!
Нека сега използваме повече градивни елементи, за да започнем да го пълним със съдържание, програмно, вместо на ръка. Добавете следните редове към същата функция:
presentation.getSlides()[0] .getPageElements()[0] .asShape() .getText() .setText('Weekly Report ' + date);
Сега нещата стават малко по-интересни, тъй като променихме първата страница, за да включим днешната дата. В Слайдове, както и в Таблици, работите с обекти (представени от класове), всеки от които има свойства и методи (т.е. прикачена функционалност). Те са организирани в йерархия, с SpreadsheetsApp , DriveApp или SlidesApp като обект от най-високо ниво. В кодовия фрагмент по-горе трябва да преминем през тази йерархия стъпка по стъпка, за да достигнем елемента, който искаме да редактираме, в този случай: Текстът в текстово поле. На практика това означава да се достигне Презентация , пързалка , PageElement , и Форма обекти, докато най-накрая стигнем до TextRange обект, който искаме да редактираме.
Проследяването с кой тип обект имате работа може да обърка и грешките, които са резултат от опит за прилагане на операция към грешен обект, могат да бъдат трудни за разрешаване. За съжаление помощната функционалност и съобщенията за грешки в самия редактор на скриптове не винаги предоставят много насоки тук, като сребърната облицовка е, че подобно внимание поне ще подобри вашите практики за контрол на качеството.
След като създадохме презентацията и актуализирахме заглавието, сега е време да вмъкнем една от новите ни диаграми в нея. Имайки предвид йерархията на обектите, следващият код сега трябва да има смисъл:
var spreadsheet = SpreadsheetApp.getActive(); var sheet = spreadsheet.getSheetByName(date); var chart = sheet.getCharts()[0]; var position = {left: 25, top: 75}; var size = {width: 480, height: 300}; presentation.getSlides()[1] .insertSheetsChart(chart, position.left, position.top, size.width, size.height);
Ако стартирате пълния скрипт, изходната презентация трябва да изглежда по следния начин:
Надяваме се, че този пример илюстрира принципите и дава вдъхновение, за да започнете със собствените си експерименти. Ако се замислите, сигурен съм, че можете да намерите поне няколко примера за ръчна работа, извършена във вашата компания днес, която наистина трябва да бъде автоматизирана по този начин. Служи за освобождаване на време за мислене, анализ и прилагане на преценка, а не за механично разбъркване на данни от един формат и / или място в друг. Подобряване на опита за разработка Както вече споменахме, версията на JavaScript, поддържана в Google Apps Script, е стара и функционалността на онлайн редактора на скриптове е много ограничена. Ако просто записвате макрос или пишете няколко десетки реда, наистина няма да забележите. Ако все пак имате амбициозни планове за автоматизиране на всички аспекти на седмичното или месечното си отчитане или искате да създадете плъгини, тогава ще се радваме да разберем, че има инструмент за команден ред което ви позволява да се развивате, като използвате любимата си среда за разработка.
Ако сте на такива нива на владеене, тогава вероятно ще искате да се възползвате и от най-новите функции, които JavaScript може да предложи, и потенциално дори повече, тъй като с инструмента за команден ред можете да се развиете и в TypeScript .
Ако установите, че работата с Apps Script не е вашата чаша чай, тогава има други опции, в зависимост от случая на употреба. Ако искате да направите по-напреднало криптиране на номера, да се свържете с API или бази данни или просто да предпочетете езика за програмиране Python пред JavaScript, тогава Google Сътрудничество е безценен продукт. Той ви дава бележник Jupyter, работещ на сървърите на Google, който ви позволява да пишете скриптове на Python интегрират безпроблемно с вашите файлове в Google Drive и чрез ‘Gspread’ библиотека, улеснява работата с данните ви за електронни таблици.
Изложих много от предимствата на Python в статия за това как да го използвате за финансови функции, което също служи като нежно въведение в работата с тетрадки Python и Jupyter в бизнес и финансов контекст. Едно много важно предимство за мен е, че за разлика от Apps Script, бележникът на Python в Colaboratory е интерактивен, така че виждате резултатите (или съобщението за грешка) след изпълнението на всеки ред или малък блок код.
Този урок за Google Apps Script показа поглед върху възможното чрез кодиращия език на Google. Възможностите са практически безкрайни. Ако обаче нямате техническа подготовка, примерите за кодове може да изглеждат плашещи и може би си мислите, че печалбите от производителността, спечелени от изучаването на Google Apps Script, може да не са достатъчни, за да надхвърлят значителната инвестиция по отношение на необходимото време да го научите.
Това, разбира се, зависи от много фактори, включително какъв тип роля имате или очаквате да имате в бъдеще. Но дори и да не очаквате да направите нещо подобно на примерите, показани тук, разбирането на това, което е възможно, и приблизително колко работа ще отнеме, може да предизвика мисли и идеи за това как да подобрите производителността във вашата компания, за вашите клиенти или себе си лично.
Лично аз мога да потвърдя удовлетворението от това, че съм седнал и натиснал бутон, който завършва досадната ръчна работа за един час за по-малко от минута. След като направите това за 50-ти път, ще бъдете благодарни за няколко часа, прекарани на всичко това, на първо място, което в крайна сметка е послужило за освобождаването на времето ви за повече занимания с добавена стойност. След известно време тези ползи от мащабирането стават пристрастяващи.
Достъпът до Google Apps Script се осъществява от функционалността на Script Editor в софтуерните продукти на Google. Кодирането може да бъде записано в последователността на потребителските стъпки или директно написано / редактирано в Script Editor.