Een Excel App is een nieuwe variant wanneer het gaat om software bouwen voor Excel.
Er kan op drie manieren software worden ontwikkeld voor Excel. Net zoals dit het geval is bij de meeste andere applicaties van Office.
De eerste manier is met de alom bekende programmeertaal VBA (Visual Basic for Applications). Deze methode is laagdrempelig en snel omdat de IDE (Integrated Development Environment) gewoon in Excel zelf zit.
Een IDE is software waarin ontwikkeld kan worden. Binnen Excel is de IDE snel te activeren met de sneltoetsen [ALT] + [F11]. Deze IDE wordt ook wel VBE genoemd: Visual Basic Editor.
De andere twee manieren zijn met VSTO en Office Apps. Voor deze manieren is een aparte zwaardere IDE nodig zoals bijvoorbeeld Visual Studio 2015 met Office Developer Tool.
In dit artikel worden de drie manieren door Microsoft zelf toegelicht.
VSTO staat voor Visual Studio Tools for Office en is een uitbreiding op VBA om desktop toepassingen te ontwikkelen.
Office Apps - tegenwoordig beter bekend als Office (Web) Add-Ins - zijn relatief nieuw. Vanaf versie 2013 is de Office store geïntroduceerd. Hierdoor is het mogelijk om apps te ontwikkelen en aan te bieden. Deze apps draaien ook op de online varianten van Excel. Hiermee is het dus mogelijk om apps te ontwikkelen, met javascript, die platform onafhankelijk werken. Een app kan derhalve draaien op de meeste Windows, Apple, Android en Linux (mobiele) apparaten in combinatie met (online) Excel.
In de linker afbeelding is een voorbeeld te zien van zo'n app. Met deze app kan een speedometer (meter die toont wat de status is van het beoogde resultaat) gemaakt worden. Deze app kent een gratis en betaalde variant.
Naast deze varianten kunnen Apps ook onderverdeeld worden in twee soorten uitvoeringen. De content app, zie voorbeeld speedometer, en de task pane app. Een content app is ideaal voor bijvoorbeeld grafieken en een task pane app dient meer als GUI (Graphical User Interface) voor de aansturing van de toepassing. Vergelijk dit met een UserForm in VBA.
Belangstellende voor de ontwikkeling van apps kunnen gelijk aan de slag! Download hiervoor de gratis apps API Tutorial content of task pane. Met zo'n app kan voorbeeld source code live worden uitgevoerd met direct resultaat. Daarnaast kan deze code ook nog eens handmatig worden aangepast.
Op de website http://dev.office.com/ staat alle benodigde informatie voor de bouw van apps, zoals bijvoorbeeld het Excel JavaScript API reference. Op de website van w3schools is de standaard syntax van javascript te achterhalen.
Om kennis te nemen van de verschillen tussen VBA en javascript kunnen de onderstaande procedures bestudeerd worden. Beiden procedures doen precies hetzelfde; alle gegevens uit het huidige werkblad worden gekopieerd naar het nieuwe werkblad met de naam "Werkblad nieuw".
VBA
Druk op de sneltoetsen [ALT] + [F11] in Excel, voeg een nieuwe module in en plak daarin de onderstaande code. Druk vervolgens op de toets [F5] om deze uit te voeren.
Sub Uitvoeren() ' Bron objecten Dim shtBron As Worksheet Dim rngBron As Range Set shtBron = ActiveSheet Set rngBron = shtBron.UsedRange ' Doel objecten Dim shtDoel As Worksheet Set shtDoel = ActiveWorkbook.Sheets.Add shtDoel.Name = "Werkblad nieuw" ' Lus Dim i, j For i = 1 To rngBron.Rows.Count For j = 1 To rngBron.Columns.Count shtDoel.Cells(i, j).Value = shtBron.Cells(i, j).Value Next j Next i End Sub
Javascript
Activeer de API Tutorial content of task pane app. Activeer voorbeeld source code en vervang deze door de onderstaande code. Druk vervolgens op de knop [Run] om deze uit te voeren.
Excel.run(function (ctx) { //Bron objecten var shtBron = ctx.workbook.worksheets.getActiveWorksheet(); var rngBron = shtBron.getUsedRange(); rngBron.load('values'); //Doel object var shtDoel = ctx.workbook.worksheets.add("Nieuw werblad"); //Lus return ctx.sync() .then(function () { for (var i = 0; i < rngBron.values.length; i++) { for (var j = 0; j < rngBron.values[i].length; j++) { shtDoel.getCell(i, j).values = rngBron.values[i][j]; } } }) .catch(function (error) { console.log("Fout: " + error); }); });