Building Office Add-ins using Office.js
This book is a guide to building Office Add-ins, describing the principles and design patterns shared by the new 2016+ APIs for Excel, Word, and OneNote.
Download some sample book content, or buy it today. All proceeds from the book go to humanitarian work / disaster-relief, matched by Microsoft's generous Employee Match program. More info here.
About
About the Book
This book is about creating Office Add-ins – and in particular, about the Office 2016+ wave of Office.js APIs.
Want to get started with just the very core concepts, before buying the book? Download some sample chapters, or better yet, buy the book regardless: I am sure you'll find the topics therein new and useful for writing add-ins; and if you don't, LeanPub's Happiness Guarantee will let you get a full refund anytime in the first 45 days.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
All proceeds from this book will be donated to humanitarian work / disaster relief (and also get matched by Microsoft's generous Employee Match program, for double impact). See the detailed accounting here.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Office 2016 has seen a major re-birth of the API model, with hundreds of new APIs created for Excel and Word and OneNote. These APIs are cross-platform, are built on a modern web framework, and offer some of the same powerful functionality that previously was only available on the Desktop.
In spirit, the new Office.js APIs are reasonably similar to their VBA/VSTO counterparts, but with the notable difference of being async – which brings with it a new set of concepts and best practices. This book will begin by address the core concepts to help you get over the initial learning curve, and get started on using the APIs. The subsequent chapters will expand upon these topics, covering more advanced scenarios, and offering debugging advice, tips, FAQs, and so forth.
Yours truly,
- Michael Zlatkovsky, the author (and member of the Office API team from 2015-2019)
Packages
Pick Your Package
All packages include the ebook in the following formats: PDF, EPUB, and Web
The Book
Minimum price
Suggested price$19.99$15.99
3 Copy Package
Minimum price
Suggested price$55.00This package is for THREE copies of the book, to distribute among your Dev team, at a small discount. After checkout, in the confirmation/download page, you will see "You have purchased multiple copies of this Book. Click here to manage your download tokens." You can use this to send out the individual tokens to team members. That way, only one person (e.g., a team admin with a corporate credit card) needs to go through the checkout process, and the rest can just download the book.
$45.00
This book is also available in the following packages:
5 Copy Package
This package is for FIVE copies of the book, to distribute among your Dev team. After checkout, in the confirmation/download page, you will see "You have purchased multiple copies of this Book. Click here to manage your download tokens." You can use this to send out the individual tokens to team members. That way, only one person (e.g., a team admin with a corporate credit card) needs to go through the checkout process, and the rest can just download the book.
- Minimum price
- $75.00
- Suggested price
- $85.00
Author
About the Author
Michael Zlatkovsky
This book is written for Office Developers, by an Office Developer. By the latter, I mean both that I had been a developer who used Office technology extensively for a number of years, and that I am now a developer on the Office Extensibility Platform team – the very team that created Office Add-ins.
Having been a key participant in the design of the new Office 2016 wave of Office.js APIs – and having seen folks embrace the framework, but struggle with some of the more concepts – I wanted to share some insights & techniques, as well as the full end-to-end story, of how to create Office Add-ins.
You can find me on StackOverflow, where I frequently answer questions tagged as "[office-js]" (which has been a source of inspiration for many sections of this book). I have a backlog of topics I want to cover in this book: some already fleshed out, others less so. In the spirit of the "lean" methodology, I will be updating the book frequently as I cover more and more topics. Thanks for reading, and please feel free to contact me for feedback on the book, requests for topics, etc.
Yours truly,
- Michael Zlatkovsky
Contents
Table of Contents
1The book and its structure
- 1.1The “evergreen”, in-progress book
- This book is published using a “lean” methodology – publishing early, and publishing often.
- 1.2Release notes
- Version 1.6 (August 26, 2017) [261 pages]
- Version 1.5 (August 2, 2017) [249 pages]
- Version 1.4 (July 19, 2017) [232 pages]
- Version 1.3 (May 23, 2017) [217 pages]
- Version 1.2 (Feb 20, 2017) [210 pages]
- Version 1.1 (Jan 22, 2017) [189 pages]
- Version 1.0 (Dec 12, 2017) [144 pages]
- 1.3Bug reports / topic suggestions
- 1.4Twitter
- 1.5Who should read this book
- 1.6From the author
- 1.7A few brief notes
- 1.8Acknowledgments
2Introduction to Office Add-ins
- Chapter structure & planned content
- 2.1What’s “new” in the Office 2016 APIs (relative to 2013)?
- 2.2What about VBA, VSTO, and COM Add-ins?
- 2.3“But can Office.js do XYZ?”
- 2.4A word on JavaScript and TypeScript
- 2.5Office.js: The asynchronous / deferred-execution programming model
- 2.5.1Why is Office.js async?
- 2.5.2What is meant by “the server”
3Getting started: Prerequisites & resources
- Chapter structure
- 3.1Script Lab: an indispensable tool
- Import someone else’s snippet, or export your own
- 3.2The optimal dev environment
- 3.3API documentation resources
4JavaScript & Promises primer (as pertaining to our APIs)
- Chapter structure & planned content
- 4.1“JavaScript Garden”, an excellent JS resource
- 4.2JavaScript & TypeScript crash-course (Office.js-tailored)
- 4.2.1Variables
- 4.2.2Variables & TypeScript
- 4.2.3Strings
- 4.2.4Assignments, comparisons, and logical operators
- 4.2.5
if,for,while - 4.2.6Arrays
- 4.2.7Complex objects & JSON
- 4.2.8Functions
- 4.2.9Functions & TypeScript
- 4.2.10Scope, closure, and avoiding polluting the global namespace
- 4.2.11Misc.
- 4.2.12jQuery
- 4.3Promises Primer
- 4.3.1Chaining Promises, the right way
- 4.3.2Creating a new Promise
- Native promises, vs. polyfills, vs. OfficeExtension.Promise.
- 4.3.3Promises,
try/catch, andasync/await - JavaScript-only
5Office.js APIs: Core concepts
- Chapter structure
- 5.1Canonical code sample: reading data and performing actions on the document
- Try it out
- JavaScript-only
- 5.2Excel.run (Word.run, etc.)
- 5.3Proxy objects: the building-blocks of the Office 2016 API model
- 5.3.1Setting document properties using proxy objects
- 5.3.2The processing on the JavaScript side
- 5.3.3The processing on the host application’s side
- 5.3.4Loading properties: the bare basics
- 5.3.5De-mystifying
context.sync() - Looking for a JavaScript-based (non-
async/await) template instead, for a multi-syncscenario? - 5.4Handling errors
- 5.4.1The basics of Office.js errors
- 5.4.2Don’t forget the user!
- 5.4.3Some practical advice
- 5.5Recap: the four basic principles of Office.js
- Try it out
6Implementation details, if you want to know how it really works
- Chapter structure
- 6.1The Request Context queue
- 6.2The host application’s response
- 6.3Back on the proxy object’s territory
- 6.4A special (but common) case: objects without IDs
7More core load concepts
- Chapter structure
- 7.1Scalar vs. navigation properties – and their impact on
load - KNOWLEDGE CHECK:
- 7.2Loading and re-loading
- 7.3Loading collections
- Common error when accessing items on a collection:
- 7.4Understanding the
PropertyNotLoadederror - 7.4.1What does it even mean?
- 7.4.2Signaling your intentions: an analogy
- 7.4.3Common mistake: re-invoking
getmethods (and in general, loading on methods versus properties) - 7.4.4Another common mistake: loading nonexistent properties
- 7.4.5A rarer and more befuddling case: when using an object across
run-s - 7.5Methods that return “primitive” types (strings, numbers, etc). E.g.: tables.getCount(), chart.getImage(), etc.
8More core sync concepts
- Chapter structure
- 8.1Real-world example of multiple
sync-calls - SCENARIO: A grade book tool
- Looking for a similar JavaScript-based (non-
async/await) sample, instead? - Download sample code
- 8.2When to sync
- 8.3The final
context.sync(in a multi-syncscenario) - 8.4A more complex
context.syncexample: - Scenario: Stock-tracker and net-worth calculator
- Splitting work across multiple subroutines
- Download sample code
- 8.5Avoiding leaving the document in a “dirty” state
9Checking if an object exists
- Chapter structure
- 9.1Checking via exception-handling – a somewhat heavy-handed approach
- An analogy
- 9.2A gentler check: the
*OrNullObjectmethods & properties - 9.2.1Case 1: Performing an action, and no-op-ing otherwise
- Important: Objects may be weirder than they appear, once you enter
*OrNullObjectterritory! - 9.2.2Case 2: Checking whether the object exists, and changing behavior accordingly
- A corollary to the
OrNullObjectpattern: there is no need to check forisNullObjectunless you are in*OrNullObjectland.
10Excel.run (Word.run, etc.) advanced topics
- Chapter structure & planned content
- 10.1What does “
.run” do, and why do I need it? - 10.2Using objects outside the “linear”
Excel.runorWord.runflow (e.g., in a button-click callback, in asetInterval, etc.) - 10.2.1Re-hydrating an existing Request Context: the overall pattern, proper error-handling,
object.track, and cleanup of tracked objects. - Try it out
- Try it out, midway
- Try it out, the completed code
- 10.2.2A common, and infuriatingly silent, mistake: queueing up actions on the wrong request context
- 10.2.3Resuming with multiple objects
- 10.2.4Why can’t we have a single global request context, and be one happy family?
11Other API Topics
- Chapter structure & planned content
12The practical aspects of building an Add-in
- Chapter structure & planned content
- 12.1Walkthrough: Building an Add-in using Visual Studio
- 12.2Getting started with building TypeScript-based Add-ins
- 12.2.1Using Visual Studio
- 12.2.2Using Yeoman generator & Node/NPM
- 12.3Debugging: the bare basics
- 12.4IntelliSense
- 12.5Office versions: Office 2016 vs. Office 365 (MSI vs. Click-to-Run); Deferred vs. Current channels; Insider tracks
- The golden path
- Why you should care
- 12.6Office.js API versioning
- 12.6.1The JavaScript files
- 12.6.2The host capabilities
- Important: Version numbers are per API SET
- 12.6.3The Beta Endpoint
- Tip: writing
isSetSupportedfor the Beta endpoint - 12.6.4How can you know than an API is “production-ready”?
13Appendix A: Using plain ES5 JavaScript (no async/await)
- Chapter structure
- 13.1Passing in functions to Promise
.then-functions - JavaScript-only
- 13.2JavaScript-only version of the canonical code sample
- JavaScript-only
- Try it out
- 13.3JavaScript-specific
syncconcepts - 13.3.1A JavaScript-based multi-sync template
- 13.3.2Returning the
context.sync()promise - 13.3.3Passing values across
.then-functions - 13.3.4JavaScript example of multi-
synccalls - Download sample code
14Appendix B: Miscellanea
- Chapter structure
- 14.1Script Lab: the story behind the project
The Leanpub 60 Day 100% Happiness Guarantee
Within 60 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.
Now, this is technically risky for us, since you'll have the book or course files either way. But we're so confident in our products and services, and in our authors and readers, that we're happy to offer a full money back guarantee for everything we sell.
You can only find out how good something is by trying it, and because of our 100% money back guarantee there's literally no risk to do so!
So, there's no reason not to click the Add to Cart button, is there?
See full terms...
Earn $8 on a $10 Purchase, and $16 on a $20 Purchase
We pay 80% royalties on purchases of $7.99 or more, and 80% royalties minus a 50 cent flat fee on purchases between $0.99 and $7.98. You earn $8 on a $10 sale, and $16 on a $20 sale. So, if we sell 5000 non-refunded copies of your book for $20, you'll earn $80,000.
(Yes, some authors have already earned much more than that on Leanpub.)
In fact, authors have earned over $14 million writing, publishing and selling on Leanpub.
Learn more about writing on Leanpub
Free Updates. DRM Free.
If you buy a Leanpub book, you get free updates for as long as the author updates the book! Many authors use Leanpub to publish their books in-progress, while they are writing them. All readers get free updates, regardless of when they bought the book or how much they paid (including free).
Most Leanpub books are available in PDF (for computers) and EPUB (for phones, tablets and Kindle). The formats that a book includes are shown at the top right corner of this page.
Finally, Leanpub books don't have any DRM copy-protection nonsense, so you can easily read them on any supported device.
Learn more about Leanpub's ebook formats and where to read them
Write and Publish on Leanpub
You can use Leanpub to easily write, publish and sell in-progress and completed ebooks and online courses!
Leanpub is a powerful platform for serious authors, combining a simple, elegant writing and publishing workflow with a store focused on selling in-progress ebooks.
Leanpub is a magical typewriter for authors: just write in plain text, and to publish your ebook, just click a button. (Or, if you are producing your ebook your own way, you can even upload your own PDF and/or EPUB files and then publish with one click!) It really is that easy.