This page lists the major changes in each release of Google Apps Script in 2014. It is intended to help developers identify changes in behavior. For more recent changes, see the current year's release notes.
December 2014
December 11, 2014
- Added a new
IFRAME
sandbox mode for HTML service that imposes many fewer restrictions than the other sandbox modes and runs much faster. However,IFRAME
mode does not work at all in certain older browsers, including Internet Explorer 9. - Deprecated both the UI service and the DocsList service. As announced in the blog post, the DocsList service will be turned off on April 20, 2015, and the UI service will be turned off on June 30, 2015. To create user interfaces, use the HTML service instead. To replace the DocsList service, use the Drive service instead.
- Removed the Domain service, as announced earlier in the year.
December 1, 2014
- Added five new
FormApp
methods:Form.getShuffleQuestions()
: Determines whether the order of the questions on each page of the form is randomized.Form.hasLimitOneResponsePerUser()
: Determines whether the form allows only one response per respondent. If the value is true, the script cannot submit form responses at all.Form.setLimitOneResponsePerUser(enabled)
: Sets whether the form allows only one response per respondent. The default for new forms is false. If the value is set to true, the script cannot submit form responses at all.Form.setShuffleQuestions(shuffle)
: Sets whether the order of the questions on each page of the form is randomized.Form.shortenFormUrl(url)
: Converts a long URL for a form to a short URL.
- Added two new
SpreadsheetApp
methods:Sheet.insertImage(blob, column, row)
: Inserts aBlob
as an image in the sheet at a given row and column.Sheet.insertImage(blob, column, row, offsetX, offsetY)
: Inserts aBlob
as an image in the sheet at a given row and column, with a pixel offset.
October 2014
October 23, 2014
- Add-ons are now available in Google Forms. As with add-ons for Docs and Sheets, Forms add-ons are in developer preview, so you must apply to publish them.
- Removed the Finance service, as announced earlier in the year.
- The following fix was applied:
- Issue 3928:
The
Document
methodsetSelection
, theSheet
methodactivate
, and theSpreadsheet
methodssetActiveRange
andsetActiveSelection
now work correctly if they are called from anonOpen
oronEdit
trigger.
- Issue 3928:
The
October 14, 2014
- Add-ons for Google Sheets and Docs can now use time-driven installable triggers.
September 2014
September 30, 2014
- Added the
LinearOptimizationService
, which allows scripts to model and solve linear and mixed-integer linear programs. - Add-ons for Google Sheets and Docs can now use most installable triggers, although they still cannot use time-driven triggers (sometimes called clock triggers).
- Added an installable open trigger
for Google Docs. Like the installable open triggers for Sheets and Forms, this
trigger is similar to the simple
onOpen()
trigger, but allows the triggered function to call services that require authorization, if the user has authorized the script ahead of time. - Added several new
ScriptApp
methods, classes, and enums to support installable triggers in add-ons:AuthorizationInfo
: An object used to determine whether the user needs to authorize this script to use one or more services, and to provide the URL for an authorization dialog. Returned byScriptApp.getAuthorizationInfo()
.AuthorizationStatus
: An enumeration denoting the authorization status of a script. Returned byAuthorizationInfo.getAuthorizationStatus()
.DocumentTriggerBuilder
: A builder for document triggers. Returned byTriggerBuilder.forDocument(...)
.ScriptApp.getUserTriggers(...)
: Gets all installable triggers owned by this user in the given document, spreadsheet, or form.
- The
UiService
widgetDocsListDialog
now requires that you callDocsListDialog.setOAuthToken(oAuthToken)
before callingDocsListDialog.showDocsPicker()
.
September 4, 2014
- Added the
UiService
methodDocsListDialog.setOAuthToken(oAuthToken)
, which sets an OAuth 2.0 token to use when fetching data for the dialog, on behalf of the user whose content should be shown. This method will become mandatory before callingDocsListDialog.showDocsPicker()
on September 30, 2014. - Added the
CacheService
methodgetDocumentCache()
and theLockService
methodgetDocumentLock()
, which get a cache and a lock that all users can access within the current document, if the script is published as an add-on. These methods are conceptually similar to thePropertiesService
methodgetDocumentProperties()
, which was introduced for use in add-ons earlier this year. - Replaced the
CacheService
methodsgetPrivateCache()
andgetPublicCache()
and theLockService
methodsgetPrivateLock()
andgetPublicLock()
withgetUserCache()
,getScriptCache()
,getUserLock()
, andgetScriptLock()
, respectively. The old method names have been deprecated, but will continue to function. The new names follow the same conventions asPropertiesService
.
August 2014
August 28, 2014
- Updated the guides to extending Google Sheets, standalone scripts, scripts bound to Google Apps, web apps, simple triggers, installable triggers, and event objects.
August 14, 2014
- Updated the guide to custom functions in Google Sheets. The documentation now more clearly explains how to create and use custom functions effectively.
July 2014
July 17, 2014
- Added the value
ON_CHANGE
to theScriptApp.EventType
enum so that Google Sheets change events can be detected correctly.
June 2014
June 20, 2014
- Deprecated the script gallery in the old version of Google Sheets. As explained in the blog post, the add-on store in the new version of Sheets gives developers wider distribution, automatic updates, and several other features not available in the script gallery.
May 2014
May 29, 2014
- Added the Document service methods
getTextAlignment
andsetTextAlignment
as well as the enumTextAlignment
, to supportNORMAL
,SUPERSCRIPT
, andSUBSCRIPT
text alignment in Google Docs. - Provided a guide to migrating from Domain service to the Admin SDK advanced services. As announced in the blog post, the service will remain available for the next six months but will be turned off on November 20, 2014.
May 15, 2014
- Deprecated both ScriptDB and the Domain service. As announced in the blog post, the services will remain available for the next six months but will be turned off on November 20, 2014. To replace ScriptDB, see the migration guide and the improved guide to connecting to external databases through JDBC. To replace the Domain service, see the Admin SDK Directory and Admin SDK Reports advanced services.
- Added a
source
property to the event parameter for form triggers. This makes it possible to retrieve the form that triggered the event. - The following fixes were applied:
- Issue 3956: In the new version of Google Sheets, it is now possible to call methods that refer to the "active" sheet or spreadsheet even if the sheet or spreadsheet has just been created.
- Issue 3579:
The
Blob
methodgetAs
can now create PDFs from spreadsheets created with the new version of Sheets. - Issue 3378: The documentation page for a library version now uses the same CSS styles as the Apps Script reference documentation.
May 8, 2014
- The "Report an issue" dialog for add-ons now asks users whether they would like to share their name and email address with the developer.
May 1, 2014
- The following fixes were applied:
- Issue 3963: The Apps Script dashboard is available again.
- Issue 3533:
The
Trigger
methodsgetEventType()
andgetTriggerSource()
no longer throw an exception if the trigger belongs to a spreadsheet created by the new version of Google Sheets.
April 2014
April 24, 2014
- In the new version of Google Sheets, the Undo command can now revert changes made by a script. This was already true in Docs, Forms, and the older version of Sheets.
- The following fixes were applied:
- Issue 3891: In the new version of Sheets, custom functions now recalculate correctly if more than 100 cells are passed as an argument.
- Issue 3859: In the new version of Sheets, setting data-validation criteria for a cell that already contains a value no longer corrupts the spreadsheet.
- Issue 3773:
In the new version of Sheets, the
Browser
methodsinputBox
andmsgBox
now treat newline characters (\n
) the same way that the older version of Sheets did. Specifically,\n
produces a space, but\\n
(double-escaped) produces a line break. - Issue 2335:
The fact that the ID of a
GmailThread
varies based on the messages it contains is now documented. - Issue 2288: The fact that a Google Site or page of a site cannot have more than 500 child pages is now documented.
- Issue 1427:
The fact that the method
getAs
replaces the part of a filename that follows the last period with the new file type's extension is now documented.
April 17, 2014
- The
Document
methodsetSelection
theSheet
methodactivate
, and theSpreadsheet
methodssetActiveRange
andsetActiveSelection
no longer have any effect if they are called from anonOpen
oronEdit
trigger. - The following fixes were applied:
- Issue 3669:
In the
new version of Sheets,
the
Range
methodsgetValue()
andgetValues()
no longer throw an exception if a cell uses the built-in Sheets methods=IMAGE(url)
or=SPARKLINE(data)
. - Issue 2684: If a script relies on a deleted version of a library, it is now possible to switch to a different version.
- Issue 3669:
In the
new version of Sheets,
the
April 10, 2014
- The deprecated SOAP service and old XML service have now been removed from
autocomplete and documentation, as announced on July 9, 2013 and documented in
the Apps Script sunset schedule. Existing scripts that
use these services should still function. The UI service widgets
DeckPanel
,DecoratedPopupPanel
,DockLayoutPanel
,DockPanel
,StackLayoutPanel
, andTabLayoutPanel
have been completely disabled, as announced on April 15, 2013. - The following fixes were applied:
- Issue 3788: In the new version of Sheets, custom functions now calculate if they are passed an error value as an argument. This matches the behavior in the older version of Sheets.
- Issue 3539:
In the new version of Sheets, the
Range
methodssetValue
andsetValues
now automatically detect when a value should be set as a formula. This matches the behavior in the older version of Sheets.
April 3, 2014
- The
Range
methodgetDataSourceUrl()
is now supported in the new version of Google Sheets. For information on other incomplete Apps Script features in the new version of Sheets, see the list of known issues. - The following fixes were applied:
- Issue 3866:
The
DocsList
methodsFile.getEditors()
andFile.getViewers()
no longer throw a server error on every call. - Issue 3865:
The
DocsList
methodFile.getOwner()
no longer throws a server error on every call. - Issue 3845: The advanced Google services for Drive and Calendar are now documented.
- Issue 3624:
In the new version of Sheets, the
Sheet
methodhideSheet()
can now hide sheets that have just been inserted. - Issue 3554:
In the new version of Sheets, the
Range
methodsort()
now succeeds for ranges that do not include column A. - Issue 3522:
In the new version of Sheets, the
SpreadsheetApp
methodgetActiveSheet()
now returns the correct sheet in a single custom function call. However,getActiveSheet()
still returns an incorrect value if the custom function is used in more than one cell with the same function arguments, or if called from an installable edit trigger in the new version of Sheets. - Issue 3496:
In the new version of Sheets, the
SpreadsheetApp
methodgetActiveRange()
now returns the correct range in a single custom function call. However,getActiveRange()
still returns an incorrect value if the custom function is used in more than one cell with the same function arguments, or if called from an installable edit trigger in the new version of Sheets.
- Issue 3866:
The
March 2014
March 27, 2014
- When an add-on is installed from the store, the
onInstall()
simple trigger is now passed an event parameter,e
, which includes anauthMode
property. This makes it easier for an add-on to callonOpen(e)
fromonInstall(e)
. - The following fixes were applied:
- Issue 3691: In the new version of Google Sheets, scripts can now run for 6 minutes instead of 5 minutes.
- Issue 3236: Google Picker, a "file-open" dialog for information stored in Google servers, including files in Google Drive, is now supported in HTML service.
March 24, 2014
- In the
new version of Google Sheets,
Range.setValues()
now automatically extends the spreadsheet if the range is larger than the present size. - The following fixes were applied:
- Issue 3800: In the new version of Sheets, custom functions now accept numbers larger than 10,000,000 or smaller than 0.0001 as arguments.
- Issue 3770:
In the new version of Sheets,
Sheet.insertImage()
now inserts the image at the correct size. - Issue 3724:
In the new version of Sheets,
Range.setValue()
now correctly sets numeric values in non-English spreadsheets.
March 18, 2014
- The following fix was applied:
- Issue 3757: The link to the Google Developers Console in the Advanced Google Services dialog now opens the correct project.
March 11, 2014
- Announced a developer preview for add-ons in Google Docs and the new version of Google Sheets, with support for Google Forms coming soon. An add-on is an Apps Script project published to a store inside Docs or Sheets, which makes it easy for users to find and install new features. Our guides cover everything you need to know to develop, design, and apply to publish your first add-on.
- Released a CSS package to apply Google styling to fonts, buttons, and form elements in HTML service dialogs and sidebars, primarily for use in add-ons.
- Added the
Ui
methodcreateAddonMenu()
, which allows scripts to insert a sub-menu into the Add-ons menu in Google Sheets or Docs. For more information, see the guide to menus. - Added the
ScriptApp
enumAuthMode
, which identifies categories of authorized services that Apps Script can execute through a triggered function. For more information, see the guide to the add-on authorization lifecycle. - Changed the quota for Gmail from 10,000 reads and 10,000 writes per day (excluding sent messages) to 20,000 reads and writes combined per day.
- Added support for the custom JsDoc annotation
@OnlyCurrentDoc
, which forces the authorization dialog to ask only for access to files in which an add-on or script is used, rather than all of a user's spreadsheets, documents, or forms. An opposing annotation,@NotOnlyCurrentDoc
, is also available.
February 2014
February 25, 2014
- Deprecated the Finance service. As announced in the blog post, the service will remain available for the next six months but will be turned off on September 26, 2014.
- Replaced
ScriptProperties
andUserProperties
with a unifiedPropertiesService
. For more information, see the guide to the Properties service. - Added the following
DocumentApp
classes and methods, which allow scripts to create bookmarks and named ranges, plus set the user's cursor position or selection.Bookmark
NamedRange
RangeBuilder
Document.addBookmark(position)
Document.addNamedRange(name, range)
Document.getBookmark(id)
Document.getBookmarks()
Document.getNamedRangeById(id)
Document.getNamedRanges()
Document.getNamedRanges(name)
Document.newPosition(element, offset)
Document.newRange()
Document.setCursor(position)
Document.setSelection(range)
Position.insertBookmark()
- Added the following
ScriptApp
class and methods, which allow scripts to create state tokens that can be used in callback APIs (like OAuth flows), as well as to retrieve the script's own OAuth 2.0 access token. - Added the method
showModalDialog(userInterface, title)
to theUi
class, and replaced the methodshowDialog(userInterface)
withshowModelessDialog(userInterface, title)
. This allows scripts to specify whether a dialog in Google Docs, Forms, or the new version of Sheets should prevent the user from interacting with anything other than the dialog. - Added the client-side HTML-service method
google.script.host.editor.focus()
, which allows scripts to switch browser focus from the dialog or sidebar to the Google Docs, Sheets, or Forms editor. - In Google Docs and Forms, sidebars now ignore the
setWidth()
method; they cannot be changed from the default width of 300px. This change was applied to the new version of Sheets in the previous week's release. - In Google Docs and Forms, the Undo command can now revert changes made by a script. This is also true in the older version of Sheets, but not the new version.
- In the HTML service, the
NATIVE
sandbox mode is now the default if you have not specified which mode your script should use. In a few edge cases, this may affect how existing web apps operate; if so, append.setSandboxMode(HtmlService.SandboxMode.EMULATED)
to yourHtmlOutput
object to restore the old behavior. - The following fix was applied:
- Issue 3622: The title bar of a sidebar shown by a script in Google Docs, Forms, or the new version of Sheets is now the same height as in a sidebar shown by a built-in feature.
February 18, 2014
- Removed the
Session
methodgetActiveUserTimeZone()
, which did not return a value for most users. - In Google Docs, Forms, and the new version of Sheets, showing a dialog now automatically closes any other dialogs opened by a script. This matches the longstanding behavior in the older version of Sheets.
- In the new version of Sheets, sidebars now ignore the
setWidth()
method; they cannot be changed from the default width of 300px. This change will affect Docs and Forms soon. - The following fixes were applied:
- Issue 3522:
In the new version of Sheets, the
SpreadsheetApp
methodgetActiveSheet()
now returns the correct sheet if called from a simpleonEdit()
trigger. However,getActiveSheet()
still returns an incorrect value if used in a custom function or an installable edit trigger in the new version of Sheets. - Issue 3496:
In the new version of Sheets, the
SpreadsheetApp
methodgetActiveRange()
now returns the correct sheet if called from a simpleonEdit()
trigger. However,getActiveRange()
still returns an incorrect value if used in a custom function or an installable edit trigger in the new version of Sheets. - Issue 3332:
The
DocumentApp
methodsetHeading()
now applies heading styles in the same way that the Google Docs editor does.
- Issue 3522:
In the new version of Sheets, the
January 2014
January 27, 2014
- The quota for the number of email recipients for scripts running from consumer (gmail.com) or free Google Apps accounts has been reduced from 500 to 100 per day. The quota for paid Google Apps accounts has not been changed.
- Added the following
Session
methods, which allow scripts to determine the user's locale and time zone: - Renamed several classes and methods in
DocumentApp
. The old names are deprecated but will continue to work. You do not need to update your code.SearchResult
andSelectedElement
are nowRangeElement
.Selection
is nowRange
.Selection.getSelectedElements()
is nowRange.getRangeElements()
.
January 21, 2014
- The following requested feature was added:
- Issue 3162:
The new
SpreadsheetApp
methodSpreadsheet.getUi()
allows scripts to access the spreadsheet's user-interface environment in order to add features like menus, dialogs, and sidebars. This method is consistent with thegetUi()
methods inDocumentApp
andFormApp
, but only works in the new version of Google Sheets. The older version of Google Sheets continues to use the existing methods documented in the guides to dialogs and sidebars and menus.
- Issue 3162:
The new
- The following fix was applied:
- Issue 3529: Certain Advanced Google services that support PATCH requests should once will once again work properly.
January 13, 2014
- Renamed the
Cursor
object inDocumentApp
toPosition
. This does not require any changes to existing code. - Deprecated the
SpreadsheetApp.Spreadsheet
methodsisAnonymousView()
,isAnonymousWrite()
,isReadable()
,isWritable()
, andsetAnonymousAccess()
. Various methods of theFile
class inDriveApp
can achieve the same functionality. - Added the
SpreadsheetApp
methodDataValidationBuilder.requireFormulaSatisfied(String)
, as well as an accompanyingCUSTOM_FORMULA
value inDataValidationCriteria
. This feature can only be used in the new version of Google Sheets.
January 6, 2014
- Custom menus in Google Docs now appear in the Help menu search box.
- Custom dialogs created with the HTML service can now be
resized
by calling
google.script.host.setWidth(width)
andgoogle.script.host.setHeight(height)
in client-side code. Sidebars cannot be resized in client side code. - Added the advanced parameter
escaping
toUrlFetchApp.fetch()
. Iffalse
, reserved characters in the URL will not be automatically escaped. - The following requested feature was added:
- Issue 2044:
The
Maps.DirectionFinder.Mode
enum now includes theTRANSIT
value allowing for the retrieval of public transit routes in theMaps service
.
- Issue 2044:
The