•  4,370
Add declarations (x = (javascript) or x = some text) and include formulas (=x or =(javascript)) anywhere in your document. Reveal and hide formulas precisely. Render rich text.
New 5/10: Fixed update bugs
New 4/1: Header and Footer support
New 3/25: Rich text definitions in doc / Refer to last computation using 'last' / Name your formula in @ notation (see cheat sheet)
New: Visually modify generated tables without helpers and rich text sequences.

Have you ever wished you could synchronize content within one Google doc? Do you need temporary placeholders that you will replace later? Do you want to generate text? Do you miss spreadsheets in docs?

If you answered yes to one of these questions, this Google doc extension is for you. It enables you to define names (a.k.a. variables) anywhere in the document or in a special box on the side panel, and to insert computations that produce rich text and images anywhere in the document.

plus: if you computations are simple enough, formulas are reversible. This means you can edit the result of a formula to change the formula itself, in the doc or in the computed values on the side panel (with a lightblue background). For now, strings, numbers, booleans, variables, comments and parentheses are the only reversible things. More will come (conditionals, concatenation, pure function calls, etc.)

# Quick start

Select some portion of text that you want to reuse.
Click on "Name selection", then enter "x" in the dialog box.
Now every time you want to use a clone of this selection, click on the button "x".
You can change the value of "x" either directly in the document, or on the side panel.

Click on the Cheat sheet to have a sense of everything you can do with this add-on.

# Advanced steps

## Define names

You can define a name anywhere in your document, or in the text zone under the button "Display values".
Definitions have to start with a name, the sign equal '=' and a non-empty space after it. If the content starts with an opening parenthesis or square bracket, or if it a number or a boolean (true/false), the content will be evaluated as raw JavaScript. Else, the remaining until the end of the newline is treated as raw rich text.
Definitions can depend on previous definitions, but they must be in order.
The following are all valid definitions of names:

    version = 1.0 beta
    name = ("MySoft" + version)
    citations = ({ mayer18: "https://dl.acm.org/citation.cfm?id=3276497", chugh16: "https://dl.acm.org/citation.cfm?id=2908103" })
    cite = (function (name) { return typeof citations[name] !== "undefined" ? ["[" + name + "]", {link: citations[name]}] : "[" + name + "???]"; })

## Write formulas in your document

Anywhere in the document, write = followed by either

* a name
* a name followed by a JavaScript expression in parentheses
* a JavaScript expression inside parentheses or square brackets

If the formula has the syntax `=customName@(blablah)`, not only it will output the result of evaluating `blablah`, but also assign it the name `customName` so that it can be reused in other formulas.

For example, in a document, you would write raw

    =name is out!
    =[name, {bold: true}] is a n=(function() { var x = ""; var i = 10; while(i-- > 0) x 
= x + "i"; return x} ())ce software based on =be@("bidirectional evaluation") =cite("mayer18") that goes beyond the original ideas of prodirect manipulation =cite("chugh16") because =be is more flexible.

# Display values

Click on "Display values". It will evaluate all formulas and replace them by their values, highlighted in green if the option "Highlight values" is set. If something is selected, only the formulas under the selection are evaluated. The document above would be rendered as:

    MySoft 1.0 beta is out!
    MySoft 1.0 beta is a niiiiiiiiiice software based on bidirectional evaluation [mayer18] that goes beyond the original ideas of prodirect manipulation [chugh16] because bidirectional evaluation is more flexible.

Formulas should either return raw text, rich text or elements.

Rich text consists in a 2-element array where the first element is the text, and the second is a Javascript object containing styling material. If the method setThing exists in this page https://developers.google.com/apps-script/reference/document/text, then thing : value is a valid style attribute. Here is a list of supported attributes and shortcuts

* backgroundColor (or background): a string representing a color like "#FF00FF".
* bold: boolean (true or false).
* fontFamily: string representing a valid font name.
* fontSize: integer representing a valid font size.
* foregroundColor (or color): a string representing a color like "#FF00FF".
* italic: boolean (true or false).
* linkUrl (or link): string representing an URL.
* strikeThrough (or strike): boolean (true or false).
* textAlignment (or align): either "normal", "superscript" or "subscript"
* underline: boolean (true or false).

Elements consist in a 3-element array where the first element is the tag (currently, only "img" supported, which is the same as "InlineImage"), the second is an object with the attributes (src required for images), and the third is a list of children ([] should be explicitly entered for images)

Here is a list of supported attributes for images:
* alt   (string)
* title (string)
* width (number in pixels)
* height (number in pixels)

# Reveal formulas

To change formulas behind values, click on "Display formulas". It will replace all computed values by their respective formulas, and highlight them in orange if the option "Highlight formulas" is set. If something is selected, only formulas within the selection are revealed. You can then edit any formula and click on "Display values" once you are done.

# Give a name to a selection

Select some part of text or mulltiple elements (such as table, paragraphs and list items), and give them a name to reuse it. If you select the option "Assign names inline", the names will be given using the =name@ notation, else they will be defined in the sidebar textarea.
Sort by:
Adam Reis
February 24, 2020
Unfortunately it doesn't let me install it on account of complaining that Google sign in has been temporarily disabled for this app.
Is this review helpful?
A user of Spreadsheet Cells in JavaScript, Fields - Sketch-n-Script Formulas
March 16, 2020
As of today (March 16, 2020), the add-on is working again. I exchanged a couple of emails with Google so that they help me comply with branding, privacy policy, documentation and more.
A user of Spreadsheet Cells in JavaScript, Fields - Sketch-n-Script Formulas
March 10, 2020
I'm sorry of that. I took action, and asked Google to verify this app as soon as possible. All new users are currently unable to install the app.
Dr. Rafi Amir-ud-Din
July 26, 2019
It is an amazing addon. However, I am not sure how we can handle the definitions which are written on multiple lines. For example, I would like to define a signature which includes my name on the first line, my designation on the second line, my university address on the third line and so on. Thanks a great lot once again for putting up such a remarkable tool.
Is this review helpful?
A user of Spreadsheet Cells in JavaScript, Fields - Sketch-n-Script Formulas
January 10, 2020
Very good question. Multiple lines are not supported in raw format, but JavaScript to the rescue, the following document works well: signature=("Dr. Rafi Amir-ud-Din\nUniversity address 301") =signature As a bonus, you can even put your name in italics using the following syntax: signature=([[“Dr. Rafi Amir-ud-Din”, {italic: true}], “\nUniversity address 301”]) =signature
A User of Spreadsheet Cells in JavaScript, Fields - Sketch-n-Script Formulas
May 6, 2019
This Add-on may need some more work, or I did not understand how to use it. After adding 4 or 5 formulas, it would lose or start duplicating my variables. It was frustrating try to and fix because its behavior seemed unpredictable to me. It's unclear how to remove a variable. It's not obvious to me what the top input panel is for versus the individually editable fields below. This add-on has great potential. I would happily re-rate if changes are made.
Is this review helpful?
A user of Spreadsheet Cells in JavaScript, Fields - Sketch-n-Script Formulas
May 10, 2019
Hi Colby, Thank you very much for reviewing our add-on. I appreciate a lot your honest experience, it's likely going to help me improve the user interaction. I would like to understand better your experience so that I can fix these issues that seem mostly related to my own design bias rather than features. Would you please contact me on my email address so that we can chat about all these issues? It's mikael at tharzen dot com Thanks,
A User of Spreadsheet Cells in JavaScript, Fields - Sketch-n-Script Formulas
February 20, 2019
Huge time saver and productivity blessing! Finally a way to sync everything in my documents (and much more interesting stuff, I am only scratching the potential). This functionality has been missing from text processors since like FOREVER, don't ask me why! Glad to finally enter the 21st century. Thank you Mikaël.
Is this review helpful?
1-4 of 4
Additional information
Terms of Service
Clear search
Close search
Google apps
Main menu