Google/Sheet/Q/Is there a way to download an image out of a Google Sheet?
Is there a way to download an image out of a Google Sheet?
- Answer/Official from Add an image to a spreadsheet, IMAGE, Save or publish your chart, Class CellImage, Class OverGridImage, Sheets API Cells reference, Sheets API Other reference, Export MIME types for Google Workspace documents, and Export your data from Google Docs, Sheets, Slides, Drawings, Sites, Drive, Forms & Vids
- Short answer: For two of the three ways an image can sit in a spreadsheet, yes. For the third — an image floating over the cells, which is what you get by dragging a picture in — Google documents no download path at all: none in the interface, none in Apps Script, none in the Sheets API, and no download format that produces the image as its own file. An image placed in a cell has exactly one documented route, the Apps Script call
CellImage.getContentUrl(), which returns a short-lived Google-hosted URL. An image placed by the IMAGE() function needs no extraction, because the cell's formula already holds the source URL. - The answer splits three ways because "an image in a sheet" names three different objects. Google's own insert flow offers the choice and then documents the three results separately, with different menus, different Apps Script classes, and different amounts of documentation. Right-clicking the picture and hunting for a save command is the natural first attempt, and it lands on the one variant Google documents nothing for.
An image over the cells has no documented download path
- Verified — the help article documents every other operation on an image and not this one. Add an image to a spreadsheet covers inserting, pasting, replacing (More > Replace image), alt text, moving, resizing, and deleting. The strings
download, save, and export appear zero times in the article body, on the Computer tab and on both mobile tabs. - Verified — the image's own menu is documented item by item, and every item is an edit. The article names Replace image, Alt text, Put image over cells, and Put image in selected cell. Nothing reads the image back out.
- Verified — the same menu on a chart does have a download command, so the omission is specific to images. Save or publish your chart gives the steps as: click the chart, then "At the top right of the chart, click More Download as", then "Choose your file type" — and states "You can download charts in SVG, PNG, or PDF format." The string Download as appears once in the chart article and zero times in the image article.
- Verified — Apps Script can enumerate these images but exposes none of their content.
Sheet.getImages() "Returns all over-the-grid images on the sheet", and the OverGridImage class it returns has methods for alt text, anchor cell, offsets, height, width, inherent height and width, assigned script, sheet, remove(), replace(blob), replace(url), and resetSize(). There is no getBlob, no getAs, and no getContentUrl — the class can overwrite an image but not read one. - Verified — the one URL method it has is deprecated and documented as usually empty.
OverGridImage.getUrl() carries the note "Deprecated. For most newly inserted images, the source URL is unavailable", and the body adds "Returns an empty string if the URL is unavailable. For most newly inserted images, the source URL is unavailable regardless how the image is inserted." Google states the limitation outright rather than leaving it unmentioned.
An image inside a cell has one documented route, through Apps Script
- Verified —
CellImage.getContentUrl() returns a URL to the image itself. Class CellImage: "Returns a Google-hosted URL to the image." The sample reads the cell and checks the type first — range.getValue(), then value.valueType == SpreadsheetApp.ValueType.IMAGE, then value.getContentUrl(). - Verified — the documentation attaches three caveats to that URL. "This URL is tagged with the account of the requester, so anyone with the URL effectively accesses the image as the original requester." "Access to the image might be lost if the spreadsheet's sharing settings change." "The returned URL expires after a short period of time." No length is given for that period, so a script has to fetch the bytes in the same run rather than store the URL for later.
- Verified — the source URL is not an alternative.
CellImage.getUrl() carries the same deprecation as its over-the-grid counterpart: "For most newly inserted images, the source URL is unavailable." The content URL is the only documented handle. - Inferred — this is a script, not a menu command. Google documents
getContentUrl() in the Apps Script reference and documents nothing equivalent in the Sheets interface, so getting one in-cell image out means opening the script editor, authorizing a spreadsheets scope, and fetching the URL. Google does not describe this as a download feature and does not describe a path that avoids the script.
An image placed by IMAGE() was never in the spreadsheet to begin with
- Verified — the function takes a URL, and the URL stays in the cell. IMAGE gives the signature
IMAGE(url, [mode], [height], [width]) and defines the first argument as "The URL of the image, including protocol (e.g. http:// )." Reading the cell's formula gives back the address the image is served from. - Verified — the Sheets API returns that formula text. The Cells reference types
CellData.userEnteredValue as an ExtendedValue and links out to that type's definition on the Other reference, where one variant is formulaValue, "Represents a formula." So a script or an API call can recover the URL for every IMAGE() cell without touching the image. - Verified — the URL is guaranteed not to be a Drive URL. The same article states "Important: You can only use URLs that aren't hosted at drive.google.com." Whatever the address is, it is a host outside Drive, reachable by an ordinary request.
- Inferred — nothing is being downloaded out of the sheet here. The spreadsheet stores an address, not an image, so the retrieval is an ordinary fetch of a third-party URL. Google documents neither this framing nor any way to make the function's rendered result into a file.
What the file-level downloads do with images
- Verified — the menu path and the format list. Create, view, or download a file gives "At the top, click File Download", then "Choose a file type. The file will download onto your computer." Export MIME types for Google Workspace documents lists what Spreadsheets can become: Microsoft Excel (
.xlsx), OpenDocument (.ods), PDF (.pdf), Web Page (HTML) as application/zip, Comma Separated Values "(first-sheet only)", and Tab Separated Values "(first-sheet only)". - Verified — no spreadsheet export format is an image format. The same table gives Drawings four formats including
image/jpeg, image/png, and image/svg+xml. Spreadsheets get none of them. Whatever a download of a sheet produces, it is a document containing images rather than an image. - Verified — CSV and TSV cannot carry an image, and they drop every tab but the first. Both are
text/ MIME types, and both are marked "(first-sheet only)" in Google's table. - Verified — Google does document that a whole-account export of a spreadsheet includes images, with a quality warning. Export your data from Google Docs, Sheets, Slides, Drawings, Sites, Drive, Forms & Vids lists, under Google Sheets, "Images. Downloaded images might be lower quality." That is the only Google statement connecting a spreadsheet download to its images, and it describes a Google/Takeout archive of an entire Google/Drive rather than the File > Download menu on one file.
- Could not confirm — whether the Microsoft Excel (
.xlsx) item under File > Download carries the images, or where they land inside the file. Google's download article says only "Choose a file type", the export-format table lists MIME types and nothing about content, and the image article never mentions exporting. The documentation is silent rather than negative. - Inferred — if the bytes do survive an
.xlsx or .ods download, they are separate files inside a zip archive. Both formats are packages rather than single documents; Microsoft describes the Open XML formats as "based on well-known technologies: ZIP and XML" (Open XML SDK). Unzipping the download and looking for the image parts is therefore worth trying, but Google documents neither that the images are there nor what they are named. - Could not confirm — what the Web Page (HTML) export contains. Google lists it as
application/zip for spreadsheets and describes the archive nowhere. - Inferred — the PDF export is the one route with a known extraction tool. A PDF stores its images as embedded objects, and pdfimages pulls them out losslessly. What that recovers is whatever the PDF holds, and Google documents nothing about whether a spreadsheet's images appear in its PDF export, at what resolution, or whether an image positioned over the cells is printed at all.
- Verified — a download can be switched off entirely. Download a file notes that "the owner may have disabled options to print, download, or copy for people with only comment or view access." The same article's format list names "A JPEG file (.jpg)" among download options, which applies to Drawings and not to spreadsheets — read it against the export-format table rather than as a Sheets option.
The Sheets API has no field for an image
- Verified —
CellData has no image field, and the reference never uses the word. Its documented fields are userEnteredValue, effectiveValue, formattedValue, userEnteredFormat, effectiveFormat, hyperlink, note, textFormatRuns, dataValidation, pivotTable, dataSourceTable, dataSourceFormula, and chipRuns. The string image does not appear anywhere in the body of the Cells reference. - Verified — the value union has five variants and none is an image.
ExtendedValue is defined not on the Cells page but on the Other reference, which Cells links to. There it is "The kinds of value that a cell in a spreadsheet can have", and the variants are numberValue, stringValue, boolValue, formulaValue, and errorValue. - Verified — the
Sheet object exposes charts but not images. Its JSON representation lists properties, data, merges, conditionalFormats, filterViews, protectedRanges, basicFilter, charts, bandedRanges, developerMetadata, rowGroups, columnGroups, slicers, tables, and commentAnchors. In that reference the word "image" appears only in the description of SheetType.OBJECT: "The sheet has no grid and instead has an object like a chart or image." The type is acknowledged; the content is not returned. - Verified — the Google Docs API documents an image URI and Sheets has no REST equivalent.
ImageProperties.contentUri in the Docs API is "A URI to the image with a default lifetime of 30 minutes." Sheets has no REST equivalent — the only comparable handle anywhere in Sheets is CellImage.getContentUrl() in Apps Script, and it covers in-cell images only.
What Google does not document
- Any way to save an image that is positioned over the cells, on any platform or interface.
- Whether the
.xlsx, .ods, zipped HTML, or PDF download of a spreadsheet contains the images, and in what form. - How long "a short period of time" is for a
CellImage content URL. - Any read path for image content in the Sheets REST API, for either placement.
- Any mobile route: the Android and iPhone tabs of the image article document inserting, moving, and deleting only, and the chart article's mobile tabs redirect to the desktop app — "To save or publish a chart, open a spreadsheet in Google Sheets on your computer."