Webpaginas maken met Excel Web App mashups
Pagina's in dit artikel
-
Voorbereidingen
-
JavaScript
-
Web formulier
-
Demo met besturing
-
Dynamische demo
-
Conclusie
Uitleg van de benodigde Javascript en html elementen
Natuurlijk kan je gebruik maken van de standaard html code optie (de
code die begint met "<iframe"), maar er is ook de mogelijkheid om
JavaScript te gebruiken om het Excel bestand in te voegen. En er is
meer, je kunt vervolgens JavaScript gebruiken om:
- Te reageren op gebeurtenissen (events) in het Excel bestand,
zoals het Change event, dat wordt aangeroepen als een cel wordt
gewijzigd
- De waarde van een cel in het ingevoegde bestand wijzigen
- Waarden uit cellen in het ingevoegde bestand uitlezen en die
waarden invullen in formulier controls op je web pagina, zoals
keuzelijstjes
- Wat je maar kunt verzinnen...
Wat is er nodig?
De volgende elementen zijn nodig op de web pagina om via JavaScript
een Excel Web App in te voegen:
- Een <div> element welke als plaatsbepaling functioneert waar het
web app control zal worden ingevoegd door de code;
- Een Excel bestand in je skydrive folder die de juiste
toegangsrechten heeft;
- JavaScript code om dat bestand in het div element te plaatsen en
om de events te activeren;
Hier kan je goede voorbeelden vinden:
Excel
Mashups
De webpagina moet de juiste document type declaratie hebben en
geladen worden vanaf een web lokatie
De Javascript zal niet werken als je de pagina opent vanaf een lokale
bron zoals een (externe) harde schijf, de pagina moet vanaf een
webserver geladen worden. Tevens moet de juiste document type declaratie
zijn ingesteld.
Dit is bijvoorbeeld een doc type declaratie die zou moeten werken:
<!DOCTYPE html>
html: Markeer waar het ingevoegde Excel object moet komen
Op de positie waar het ingevoegde Excel object moet verschijnen,
plaats je een div element, zoals deze:
<div id="chartDiv" style="width: 500px; height:
500px"></div>
Pas de afmetingen aan zodat je Excel bestand (of het onderdeel erin
dat je wilt tonen) goed past. Ik heb het div element chartDiv genoemd
omdat dat hetgene is dat ik er ga weergeven, een grafiek uit mijn
bestand.
Verwijs naar de Microsoft JavaScript bibliotheek, welke gemaakt is
om met de Excel web app te werken
Javascript moet weten hoe met het Excel web app gebeuren te werken.
Hiervoor is een verwijzing nodig naar de code bibliotheek die Microsoft
hiervoor heeft gemaakt. Dit gaat met de volgende html code:
<script language="javascript"
src="http://r.office.microsoft.com/r/rlidExcelWLJS?v=1&kip=1"
type="text/javascript"></script>
De rest van de JavaScript code is ingevat tussen de gebruikelijke
tags:
<script language="javascript" type="text/javascript">
Alle Java code die hieronder is getoond staat hier </script>
File token
Het volgende dat je nodig hebt is een zogeheten file token, welke een
unieke verwijzing is naar je Excel bestand in Skydrive. Dit filetoken
wordt in de Javascript code geplaatst en kan worden gekopieerd vanuit
het bestand invoegen dialoogvenster van Skydrive welke ik reeds heb
besproken op de vorige pagina van dit
artikel.
De file token van het voorbeeld bestand is:
SDB4A3FCAC9C7848C9!285/-5430218907388983095/t=0&s=0&v=!AK3ybHnbJCLh5H0
Niet iets dat je zou willen overtypen...
In JavaScript wordt middels deze regels een variabele gedeclareerd en
wordt tevens de file token toegekend:
// Use this file token to reference the skydrive file
in the Excel APIs
var fileToken =
"SDB4A3FCAC9C7848C9!285/-5430218907388983095/t=0&s=0&v=!AK3ybHnbJCLh5H0";
Ook hebben we een variabele nodig die een verwijzing bewaart naar de
Excel Web API (in het kort: ewa):
var ewaCht = null;
Laadt de Excel Web Application nadat de pagina is geladen
Vervolgens willen we dat de hele web pagina is geladen voordat we de
Javascript willen starten die het Excel Web App object invoegt. Dit is
niet moeilijk. Nog steeds hoort onderstaande code tussen de Script tags,
net na de twee variabele declaraties die ik hiervoor toonde:
// Run the Excel load handler on page load.
if (window.attachEvent)
{
window.attachEvent("onload", loadEwaOnPageLoad);
} else
{
window.addEventListener("DOMContentLoaded", loadEwaOnPageLoad, false);
}
Al wat hier staat is "zodra de pagina geladen is, voer dan de routine
loadEwaOnPageLoad uit".
De Excel Web Application laden
Zodra de web pagina is geladen wordt onderstaande functie
aangeroepen:
function loadEwaOnPageLoad()
{
var props =
{item: "Chart 2",
uiOptions:
{
showDownloadButton: false,
showGridlines: false,
showRowColumnHeaders: false,
showParametersTaskPane: false
},
interactivityOptions:
{
allowTypingAndFormulaEntry: true,
allowParameterModification: true,
allowSorting: false,
allowFiltering: false,
allowPivotTableInteractivity: false
}
};
// Embed workbook using loadEwaAsync
Ewa.EwaControl.loadEwaAsync(fileToken, "chartDiv", props,
OnChartLoaded);
}
Het eerste dat deze code doet is de opties voor het EWA object
opgeven, zoals of er al dan niet een download link mag worden
weergegeven en of rasterlijnen aan of uit moeten staan. Ook permissies
worden hier ingesteld.
Vervolgens wordt aan het Ewa object doorgegeven dat het to Excel
bestand moet worden geladen en waar op de web pagina hij moet worden
geplaatst ("chartDiv"). Dit gebeurt asynchroon, dus wordt er een functie
(een call-back) opgegeven welke moet worden uitgevoerd zodra het Ewa
object klaar is met het laden van het bestand. Deze functie is de
OnChartLoaded functie (de functienaam is uiteraard vrij op te geven
binnen de regels van JavaScript functienamen).
Een object verwijzing naar het geladen Ewa object instellen
Zodra het Ewa object klaar is met het laden van het bestand wordt
onderstaande functie aangeroepen:
function
OnChartLoaded(asyncResult)
{
if (asyncResult.getSucceeded())
{
ewaCht =
asyncResult.getEwaControl();
}
}
In het bovenstaande voorbeeld wordt een verwijzing naar het
resulterende Ewa object opgeslagen in de ewaCht variabele, voor later
gebruik in je code.
De volgende pagina beschrijft hoe je de Excel Web app met
besturingselementen op de web pagina laat communiceren.