Release Notes: 2013

Stay organized with collections Save and categorize content based on your preferences.

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

December 2, 2013

  • Added TITLE and SUBTITLE values to the DocumentApp.ParagraphHeading enum.
  • The following fixes were applied:
    • Issue 3101: Removed the SitesApp method Site.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.

November 2013

November 18, 2013

  • The Apps Script methods Utilities.jsonParse() and Utilities.jsonStringify() have been deprecated in favor of the now-standard JavaScript methods JSON.parse() and JSON.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.

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.

October 8, 2013

September 2013

September 23, 2013

September 16, 2013

September 9, 2013

  • Added the DocumentApp methods InlineImage.getLinkUrl() and InlineImage.setLinkUrl(url).
  • Deprecated the DocumentApp methods getFootnotes(), getLinkUrl(), setLinkUrl(url), and isAtDocumentEnd() in the classes FooterSection, FootnoteSection, and HeaderSection, as well as the methods getNextSibling() and getPreviousSibling() in the classes FooterSection and HeaderSection. 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

August 2013

August 19, 2013

August 13, 2013

August 5, 2013

  • Added the method GmailMessage.getPlainBody(), which returns the content of the message without HTML formatting.
  • Deprecated the DocsList methods find(query, start, max), getAllFiles(start, max), getAllFolders(start, max), getFiles(start, max), getFilesByType(fileType, start, max), and getFolders(start, max). Instead of these methods, use DriveApp or one of the DocsList.get*ForPaging() methods.
  • The following requested feature was added:
  • 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.

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:

July 22, 2013

  • Added DriveApp and FormApp 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.

July 9, 2013

June 2013

June 25, 2013

  • Any script that is container-bound to a Google Doc can now access the active user's Cursor and Selection by calling Document.getCursor() and Document.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() or Session.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 an If-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.

June 17, 2013

  • The following requested features were added:
  • 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() returned null 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(), and removeFromParent().
  • 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 the File 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.

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 to DocumentApp and FormApp, which returns a Ui 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 using e.postData.getDataAsString().
  • 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.

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.
  • The following fix was applied:
    • Issue 2585: Xml.parse() once again correctly parses well-structured XML and HTML documents.

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 copy InlineImage elements from one document to another.
    • Issue 170: Spreadsheet.addCollaborators() now sends an email invitation to collaborators when the emailInvitations 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 the Tree and TreeItem classes. These methods remove all children from the object.
    • Issue 1743: Added an autoResizeColumn() method to the Sheet 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.
  • 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.

April 15, 2013

  • The following changes were made to simplify the Document service:
    • Renamed the DocumentBodySection class to Body.
    • Renamed Document.getActiveSection() to getBody().
    • Removed methods of the Body class from Document so they only appear in one location.
    • Removed merge() methods for various classes that cannot be merged, such as PageBreak and HorizontalRule.
    • Removed text-related methods such as isBold() and isUnderline() from container elements such as Table while retaining them on the Text class. This functionality can now be achieved by calling editAsText() on the container element, and calling the text-related methods on the returned Text class.
    • Removed methods which allowed appending or inserting HorizonalRule elements with specified attributes.
  • Deprecated UiApp widgets DeckPanel, DecoratedPopupPanel, DockLayoutPanel, DockPanel, StackLayoutPanel, and TabLayoutPanel, which had limited usability.
  • The following fixes were applied:

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:
  • 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 the range property was previously incorrect.

March 2013

March 25, 2013

March 18, 2013

  • Renamed the action "Publish to Gallery" to "Submit to Gallery", to avoid confusion with publishing a web app.

March 13, 2013

March 11, 2013

  • Added the method Utilities.formatString(), which allows printf-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

February 2013

February 25, 2013

  • When setting font colors in a spreadsheet using Range.setFontColor() or Range.setFontColors(), color names will now automatically be converted to their corresponding hexadecimal values. For example, after calling setFontColor('red') the method getFontColor() 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() or Range.setFontColors() now appear correctly when printing the spreadsheet or exporting it as a PDF.
    • Issue 529: SpreadsheetApp.getActiveSheet() no longer fails to run in onOpen() triggers for certain spreadsheets.

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.

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 the backgroundImage 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, the range 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() and hide() methods to PopupPanel.

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 a null value when processed in a server handler or doPost() callback. By default, setting an empty or invalid date will not trigger a value-changed event, but you can call the method setFireEventsForInvalid() 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 with everyWeeks().
    • Issue 1695: GmailLabel.getThreads() now works correctly when the label name contains special characters.
    • Issue 1366: The methods getEditors() and getViewers() of the File 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 argument useJDBCCompliantTimezoneShift.
    • Issue 619: UiInstance's createAnchor method now allows links using the mailto scheme.
    • Issue 286: UrlFetchApp's fetch method now accepts followRedirects as an advanced argument.
  • 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's createToggleButton(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 class ClockTriggerBuilder 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.