This page lists the major changes in each release of Google Apps Script in 2013. It is intended to help developers identify changes in behavior. For more recent changes, see the current year's release notes.
December 2013
December 16, 2013
- Added seven new advanced services:
- Changed the default syntax
for all existing advanced services to match the underlying APIs' reference
documentation. The old Apps Script getter/setter notation for these services
will continue to work but will no longer appear in autocomplete.
- Renamed the menu entry Resources > Manage libraries to Resources > Libraries.
- Renamed the menu entry Resources > Google APIs Services to Resources > Advanced Google services.
- The following fix was applied:
- Issue 3461: A yellow warning bar should no longer appear on Apps Script gadgets that are embedded in Google Sites.
December 2, 2013
- Added
TITLE
andSUBTITLE
values to theDocumentApp.ParagraphHeading
enum. - The following fixes were applied:
- Issue 3101:
Removed the
SitesApp
methodSite.deleteSite()
, which was never functional. - Issue 3046:
UrlFetchApp
now properly preserves RFC 3986 escaping. - Issue 2497:
An rare edge case issue when using
UiApp
server handler callbacks and libraries no longer occurs. - Issue 1346:
An issue in which a library's
UiApp
server handlers created new server handlers that were not able to reference non-library functions should no longer occur.
- Issue 3101:
Removed the
November 2013
November 18, 2013
- The Apps Script methods
Utilities.jsonParse()
andUtilities.jsonStringify()
have been deprecated in favor of the now-standard JavaScript methodsJSON.parse()
andJSON.stringify()
, which now appear in autocomplete.
November 11, 2013
- The following fix was applied:
- Issue 3189:
A rare issue in which
LockService
failed to acquire a lock should no longer occur.
- Issue 3189:
A rare issue in which
November 4, 2013
- If a version of a library has been deleted by the library owner, scripts can no longer use that version.
- The following fix was applied:
- Issue 2817: Sporadic errors about missing libraries should now occur less frequently.
October 21, 2013
- The following fix was applied:
- Issue 74:
Simple
onEdit()
triggers now fire correctly when the user is not signed in to a Google account.
- Issue 74:
Simple
October 8, 2013
- Added the following
FormApp
methods, which allow scripts to work with progress bars, custom closed-form messages, and YouTube videos.
September 2013
September 23, 2013
- Added the following
DriveApp
methods, which allow scripts to get the owner of aFile
orFolder
.
September 16, 2013
- HTML Service now supports most CSS3
features. A notable exception is the
:nth-child()
pseudo-selector, which remains unsupported, along with a small number of obscure or non-standardized CSS3 features. To check whether the Caja security sandbox in HTML Service supports a specific feature, see the CSS whitelist definitions in Caja's public repository. - Added the following
DriveApp
methods, which allow scripts to save the state of a file or folder iterator and resume at a later time. These method are useful if processing an iterator in one execution would exceed the maximum execution time. - The
UiApp
widgetsHyperlink
,InlineHyperlink
,LayoutPanel
, andRichTextArea
have now been disabled, as announced on March 13, 2013 and documented in the Apps Script sunset schedule.
September 9, 2013
- Added the
DocumentApp
methodsInlineImage.getLinkUrl()
andInlineImage.setLinkUrl(url)
. - Deprecated the
DocumentApp
methodsgetFootnotes()
,getLinkUrl()
,setLinkUrl(url)
, andisAtDocumentEnd()
in the classesFooterSection
,FootnoteSection
, andHeaderSection
, as well as the methodsgetNextSibling()
andgetPreviousSibling()
in the classesFooterSection
andHeaderSection
. These methods were not useful. - The following fixes were applied:
- Issue 2621: A situation in which certain scripts did not terminate despite exceeding the execution-time limit no longer occurs.
September 3, 2013
- Added the
DriveApp
methodsDriveApp.getFoldersByName(name)
andDriveApp.searchFolders(params)
, which return aFolderIterator
with the requested results. - Added the
DriveApp
methodsFile.getViewers()
,File.getEditors()
,Folder.getViewers()
, andFolder.getEditors()
, which return an array ofUsers
with view or edit access. - Removed the ability to get the user's email address in
simple
onEdit()
triggers. Because simple triggers don't request user authentication, this change was important to protect the identity of collaborators who hadn't explicity granted permission for the script to collect their email address.
August 2013
August 19, 2013
- Added the
DriveApp
methodsFile.makeCopy(destination)
andFile.makeCopy(name, destination)
, which allow scripts to specify a folder to which a file should be copied. - The following fixes were applied:
- Issue 3097: A performance issue that affected certain scripts no longer occurs.
August 13, 2013
- Added the method
Spreadsheet.deleteSheet(sheet)
, which allows deletions of sheets that are not the active sheet.
August 5, 2013
- Added the method
GmailMessage.getPlainBody()
, which returns the content of the message without HTML formatting. - Deprecated the
DocsList
methodsfind(query, start, max)
,getAllFiles(start, max)
,getAllFolders(start, max)
,getFiles(start, max)
,getFilesByType(fileType, start, max)
, andgetFolders(start, max)
. Instead of these methods, useDriveApp
or one of theDocsList.get*ForPaging()
methods. - The following requested feature was added:
- Issue 219: Launched a new feature to allow programmatic control over data-validation rules in Google Sheets.
- The following fixes were applied:
- Issue 2916:
HTML files inserted into a new Apps Script project using the
Google Drive SDK are no longer created with the
server_js
filetype. - Issue 2880:
Special characters (such as apostrophes) no longer need to be escaped twice when passed to
DriveApp.getFilesByName()
. - Issue 2780:
DriveApp
now throws a more appropriate error message if Google Drive apps are prohibited within the user's domain.
- Issue 2916:
HTML files inserted into a new Apps Script project using the
Google Drive SDK are no longer created with the
July 2013
July 29, 2013
- All new scripts now use the new authorization flow by default.
- On ChromeOS devices, it is now possible to activate autocomplete (sometimes called "content assist") with the keyboard shortcut Ctrl + Space.
- The following fix was applied:
- Issue 2947:
Newlines are now supported in
Ui.alert()
andUi.prompt()
dialogs.
- Issue 2947:
Newlines are now supported in
July 22, 2013
- Added
DriveApp
andFormApp
to the services tracked on the Apps Script Dashboard. - The following fix was applied:
- Issue 2801:
Fixed an issue in which specific URL parameters did not work with
HtmlService
.
- Issue 2801:
Fixed an issue in which specific URL parameters did not work with
July 9, 2013
- Added
XmlService
to replace the oldXml
service. - Deprecated the old
Xml
service,SoapService
, and support for the JavaScript feature E4X. - The following fixes were applied:
- Issue 2906: Chained method calls in advanced Google services no longer throw an exception.
- Issue 2872:
File.removeEditor()
no longer throws an exception when the editor is a group instead of an individual user.
June 2013
June 25, 2013
- Any script that is container-bound to a Google Doc can now access the active user's
Cursor
andSelection
by callingDocument.getCursor()
andDocument.getSelection()
, respectively. - The Publish > Deploy as web app dialog now includes an option to save a version of the script, if a version has not previously been saved. Subsequent versions of the script must still be saved through the File > Manage versions dialog.
- Scripts now always require authorization to use the methods
Session.getEffectiveUser()
orSession.getUser()
. Existing scripts that use those methods and were upgraded to the new authorization experience require reauthorization but will not prompt for authorization automatically. To reauthorize the script, follow these instructions. UrlFetch
requests made by scripts that run on a time-based trigger now include anIf-Modified-Since
HTTP header so that Apps Script can use a cached copy of the page if one is available and the page has not changed.- The following fixes were applied:
- Issue 2820:
getActiveSheet()
now properly returns the active sheet when used with an onChange trigger. - Issue 2761:
When a
Document
element that contains an image is copied, the image is now also copied.
- Issue 2820:
June 17, 2013
- The following requested features were added:
- Issue 1034:
The new Drive Service methods
addCommenter()
andremoveCommenter()
allow scripts to add and remove commenters on files. - Issue 674:
Mail sent with
GmailApp
now appears in the Sent Mail folder in Gmail.
- Issue 1034:
The new Drive Service methods
- The following fixes were applied:
- Issue 2626: The execution transcript now correctly reports the execution time for methods that are called repeatedly.
- Issue 2559:
A sporadic issue in which
Spreadsheet.getSheetByName()
returnednull
for a valid sheet name no longer occurs. - Issue 1965:
Emails forwarded using
GmailMessage.forward()
now preserve inline images. - Issue 1414:
Range.copyTo()
now adds additional rows as necessary, if the destination sheet does not have enough rows to accommodate the range.
June 11, 2013
- The following fixes were applied:
- Issue 2823: Timestamps for the start and end of script execution, including total runtime, now appear in the execution transcript (View > Execution transcript) instead of the log.
- Issue 2807: A rare issue where a script could not be upgraded to the new authorization flow no longer occurs.
- Issue 2791:
Calling
Trigger.getTriggerSource()
for a Form-based trigger no longer throws an exception. - Issue 2734:
HtmlService
scripts that call long-running server-side functions no longer repeat the function call multiple times.
June 3, 2013
- To simplify the end user experience, function names are no longer shown in the notification message for scripts that run successfully from a spreadsheet, document, or form. Function names are still displayed when there is an error (to help with debugging) and when the script is run from the script editor.
- To simplify the Document service, the following methods were removed from the
Body
class:getNextSibling()
,getPreviousSibling()
,isAtDocumentEnd()
,getLinkUrl()
,setLinkUrl()
, andremoveFromParent()
. - The following fixes were applied:
- Issue 2819:
Folder.createFile(name, content, mimeType)
now creates the file in the folder on which the method was executed. - Issue 2776: Existing deployed webapps now properly authenticate after upgrading a script to use the new authorization experience.
- Issue 2679:
The
getAs()
method of theFile
class no longer throws an error when converting .docx, .pptx, or .xlsx files to PDF. - Issue 2643: The timestamps for a script's log messsages are now in the script's timezone.
- Issue 2597: The script editor's Find functionality no longer skips the first result.
- Issue 2819:
May 2013
May 13, 2013
- The script editor is now available within Google Docs and the Google Forms editor, and both Docs and Forms can now be containers for scripts.
- Added Forms Service, which allows scripts to create and modify Google Forms.
- Added Drive Service, which allows scripts to create and modify files and folders in Google Drive. This is a newer version of the existing DocsList Service.
- Added a
getUi
method toDocumentApp
andFormApp
, which returns aUi
object that allows the script to add features like menus, dialogs, and sidebars to the Docs or Forms editor. - Added the
FormTriggerBuilder
class to allow scripts to respond to Forms events. - Added a
setSandboxMode
method to enable a faster version of the HtmlService sandbox. - Added a
MimeType
enum, which provides access to MIME-type declarations without typing the strings explicitly. - Added an option to upgrade to a new authorization flow that requires fewer clicks and automatically creates a Google Developers Console project for every script.
May 9, 2013
- The following requested feature was added:
- Issue 2158:
The request object passed in to
doPost()
methods now contains the POST body. It can be accessed usinge.postData.getDataAsString()
.
- Issue 2158:
The request object passed in to
- The following fix was applied:
- Issue 2740:
UrlFetchApp.fetch()
calls no longer fail if the advanced parameters specify a payload without specifying the request method.
- Issue 2740:
May 2, 2013
- The following requested feature was added:
- Issue 1363:
Added support for spreadsheet change events. The
onChange()
event now fires when certain modifications, such as row insertions, are done to a spreadsheet.
- Issue 1363:
Added support for spreadsheet change events. The
- The following fix was applied:
- Issue 2585:
Xml.parse()
once again correctly parses well-structured XML and HTML documents.
- Issue 2585:
April 2013
April 29, 2013
- The following fixes were applied:
- Issue 2695: Form submits in UI Service apps once again work properly.
- Issue 2625:
The
withUserObject()
method in Html Service apps now works properly with Firefox 20. - Issue 1612:
Element.copy()
can now copyInlineImage
elements from one document to another. - Issue 170:
Spreadsheet.addCollaborators()
now sends an email invitation to collaborators when theemailInvitations
advanced parameter is set.
April 22, 2013
- Large scripts in the Script Gallery now install more quickly.
- The following requested features were added:
- Issue 1771:
Added a
clear()
method to theTree
andTreeItem
classes. These methods remove all children from the object. - Issue 1743:
Added an
autoResizeColumn()
method to theSheet
class. This method resizes a column to fit its contents. - Issue 1314:
Added support for lazy loading in the
Tree
class, which reduces wait times in rendering the UI.
- Issue 1771:
Added a
- The following fixes were applied:
- Issue 2665:
UrlFetchApp.fetch()
once again allows URLs that contain spaces. - Issue 2593:
Range.setValue()
now behaves correctly in a function called from an onEdit spreadsheet trigger. - Issue 941:
The event parameter for a
ListBox
handler function now includes the value of the selected item rather than its name. - Issue 307:
The event parameter for a
Tree
handler function now includes the ID of the selected item.
- Issue 2665:
April 15, 2013
- The following changes were made to simplify the
Document service:
- Renamed the
DocumentBodySection
class toBody
. - Renamed
Document.getActiveSection()
togetBody()
. - Removed methods of the
Body
class fromDocument
so they only appear in one location. - Removed
merge()
methods for various classes that cannot be merged, such asPageBreak
andHorizontalRule
. - Removed text-related methods such as
isBold()
andisUnderline()
from container elements such asTable
while retaining them on theText
class. This functionality can now be achieved by callingeditAsText()
on the container element, and calling the text-related methods on the returnedText
class. - Removed methods which allowed appending or inserting
HorizonalRule
elements with specified attributes.
- Renamed the
- Deprecated
UiApp
widgetsDeckPanel
,DecoratedPopupPanel
,DockLayoutPanel
,DockPanel
,StackLayoutPanel
, andTabLayoutPanel
, which had limited usability. - The following fixes were applied:
- Issue 2565: DocsList.createFile() no longer allows the creation of files with invalid MIME types or Google document MIME types.
April 8, 2013
- Simplified the classes in the Document service, removing
unnecessary
.asSomething()
methods. - Added timestamps to the log output.
- The following fixes were applied:
- Issue 2548: Triggers created in web apps that allow for anonymous access no longer fail to fire.
- Issue 2488: Charts dashboard components no longer throw serialization errors in certain scenarios.
April 1, 2013
- The following requested feature was added:
- Issue 995:
The new methods
Sheet.hideSheet()
,Sheet.isSheetHidden()
, andSheet.showSheet()
allow scripts to control the visibility of individual sheets within a spreadsheet.
- Issue 995:
The new methods
- The following fixes were applied:
- Issue 2524: Scripts that rely on deleted libraries now display a clear error message.
- Issue 2169: Installing scripts from the Script Gallery no longer results in occasional errors.
- Issue 459:
The event parameter for spreadsheet
onEdit()
functions now reports the affected range correctly in a variety of situations in which therange
property was previously incorrect.
March 2013
March 25, 2013
- The following fixes were applied:
- Issue 2534: Debugging into a recursive function using certain GroupsManager methods no longer throws an error.
- Issue 1106:
Restored the correct behavior of
Range.mergeAcross()
. This function, along withRange.merge()
and the newly addedRange.mergeVertically()
, behave like the items under a spreadsheet's Format > Merge cells menu.
March 18, 2013
- Renamed the action "Publish to Gallery" to "Submit to Gallery", to avoid confusion with publishing a web app.
March 13, 2013
- Deprecated the GUI Builder and the UIApp widgets
Hyperlink
,InlineHyperlink
,LayoutPanel
,RichTextArea
, andSuggestBox
, which had limited usability.
March 11, 2013
- Added the method
Utilities.formatString()
, which allowsprintf
-like substitution of placeholders within a format string. - View > Execution transcript now shows how much time it took to execute each statement.
- Added the property
DocsList.FileType.FORM
to let DocsList access new Google Forms. - If a script is shared with editors other than its owner and published as a web app, those other
editors can now update the app's version and access its development URL (which ends in
/dev
). - The following fix was applied:
- Issue 1917: It is no longer possible to install a script multiple times from the Script Gallery.
March 4, 2013
- The following fixes were applied:
- Issue 1182:
Calendar.getEvents(startTime, endTime, statusFilters)
now works properly. - Issue 459: OnEdit callbacks triggered by pasting to a cell now provide the correct range parameter.
- Issue 1182:
February 2013
February 25, 2013
- When setting font colors in a spreadsheet using
Range.setFontColor()
orRange.setFontColors()
, color names will now automatically be converted to their corresponding hexadecimal values. For example, after callingsetFontColor('red')
the methodgetFontColor()
will return "#ff0000". - The following fixes were applied:
- Issue 2435:
Spreadsheet-bound scripts that use
Browser.inputBox()
no longer fail. - Issue 1128:
Font colors set using
Range.setFontColor()
orRange.setFontColors()
now appear correctly when printing the spreadsheet or exporting it as a PDF. - Issue 529:
SpreadsheetApp.getActiveSheet()
no longer fails to run inonOpen()
triggers for certain spreadsheets.
- Issue 2435:
Spreadsheet-bound scripts that use
February 14, 2013
- Added the method
DocumentApp.openByUrl()
, which allows documents to be opened by their URL directly. - The following fixes were applied:
- Issue 2382:
File.makeCopy()
no longer produces an error when copying a new Google Form. - Issue 2367:
The error message for invalid queries of
ScriptDbInstance.between()
is now more descriptive. - Issue 747: Error messages now specify in which code file the error occurred.
- Issue 2382:
February 11, 2013
- Added the ability to directly attach
StaticMap
objects in emails. - The following fixes were applied:
- Issue 2388: The quota dashboard once again displays the correct number of columns.
- Issue 2344:
Scripts that contain
onInstall()
functions no longer produce an error when installed from the Script Gallery. - Issue 2250: Dates are now logged in the script's time zone.
- Issue 2021:
UiInstance.setStyleAttribute()
now properly sets thebackgroundImage
property in all supported browsers. - Issue 1811: The debugger can now step into libraries used in development mode.
- Issue 1300:
If a script bound to one spreadsheet uses an installable
onEdit()
trigger to monitor a separate spreadsheet, therange
event parameter passed to the callback function now correctly recognizes the monitored spreadsheet as its parent. - Issue 1226:
Client handlers for
ListBox
now fire properly in UiApp. - Issue 1030:
The
setStyleAttribute()
method of various UiApp objects now properly sets the 'float' attribute in Firefox. - Issue 1014:
setFocus()
now works correctly. - Issue 231:
Added
show()
andhide()
methods toPopupPanel
.
January 2013
January 31, 2013
- Added the method
SpreadsheetApp.openByUrl()
, which allows spreadsheets to be opened by their URL directly. - Changed the behavior of
ClockTriggerBuilder
so that it now respects the time zone of the script, instead of defaulting to Pacific Time. - The editor's Find dialog now supports searching over all files in the project.
- Improved the error message returned by
Range.setValues()
when the values fail to pass the validation on those cells. - The following fixes were applied:
- Issue 2317: Email address validation in UiApp now works correctly with uppercase input.
- Issue 2306: The GUI Builder dialog shown for File > Open no longer has two "Cancel" buttons.
- Issue 2265: Static maps can now contain many more markers.
- Issue 2203:
CalendarEvent.getGuestList()
now returns the event creator in addition to the other guests. - Issue 2137:
A
DateBox
containing an empty or invalid date will now have anull
value when processed in a server handler ordoPost()
callback. By default, setting an empty or invalid date will not trigger a value-changed event, but you can call the methodsetFireEventsForInvalid()
to override that behavior. - Issue 1795:
TextArea
widgets created using the GUI Builder now default to displaying scrollbars when the text is too long. - Issue 1764:
ClockTriggerBuilder.onWeekDay()
now works correctly when used in conjunction witheveryWeeks()
. - Issue 1695:
GmailLabel.getThreads()
now works correctly when the label name contains special characters. - Issue 1366:
The methods
getEditors()
andgetViewers()
of theFile
class now return the full email address for entries that are groups. - Issue 918:
Subsequent calls to
Sheet.hideColumns()
on different sheets no longer results in an error. - Issue 53:
Rows containing only data-validation rules no longer count towards
Sheet.getLastRow()
.
January 24, 2013
- The following requested features were added:
- Issue 1642:
When connecting to an external database with
Jdbc.getConnection
, you can now include the advanced argumentuseJDBCCompliantTimezoneShift
. - Issue 619:
UiInstance
'screateAnchor
method now allows links using themailto
scheme. - Issue 286:
UrlFetchApp
'sfetch
method now acceptsfollowRedirects
as an advanced argument.
- Issue 1642:
When connecting to an external database with
- The following fixes were applied:
- Issue 1012: New calendar entries that span a time change (for example, the start of daylight saving time in that time zone) are now created with the correct duration.
- Issue 912: It is now possible to display non-public images in a UiApp or HtmlService user interface, so long as the images are shared with the app's users.
- Issue 815:
UiInstance
'screateToggleButton(upText, downText)
method now functions correctly. - Issue 155:
Calendar.createAllDayEvent
now always sets the event to the correct date.
January 17, 2013
- Added the method
after(durationMilliseconds)
to classClockTriggerBuilder
to simplify the creation of one-off triggers. - The following fixes were applied:
- Issue 2155: The Uninstall link emailed to a user after authorizing a script embedded within a Google Site now works correctly.
- Issue 1882: Icons in the Script Editor now display correctly on Macs with Retina displays.
January 15, 2013
- The following fix was applied:
- Issue 2204:
Utilities.formatDate
no longer rejects certain time-zone formats, such as EST, CST, etc.
- Issue 2204: