Download link for Google Spreadsheets CSV export - with Multiple Sheets - google-sheets

I'm trying to find a link which allows me to download a CSV formatted version of my Google Spreadsheet. Currently I'm using:
https://docs.google.com/spreadsheets/d/DOCID/export?format=csv
This works great except that it only download the first Sheet. My document has multiple sheets. Does anyone know how to format this link so that it downloads either all the sheets or a specific sheet? Something like:
&sheet=all
or
&sheet=3

Every document in Google Sheets supports the "Chart Tools datasource protocol", which is explained (in a rather haphazard way) in these articles:
"Creating a Chart from a Separate Spreadsheet"
"Query Language Reference"
"Implementing the Chart Tools Datasource Protocol"
To download a specific sheet as a CSV file, replace {key} with the document's ID and {sheet_name} with the name of the sheet to export:
https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet={sheet_name}
The datasource protocol is quite flexible. Various other options include:
Response Format: Options include tqx=out:csv (CSV format), tqx=out:html (HTML table), and tqx=out:json (JSON data).
Export part of a sheet: Supply the range={range} option, where the range can be any valid range specifier, e.g. A1:C99 or B2:F.
Execute a SQL query: Supply the tq={query} option, such as tq=SELECT a, b, (d+e)*2 WHERE c < 100 AND x = 'yes'.
Export textual data: Supply the headers=0 option in case your fields contain textual data, otherwise they might be cut out during export.

Open your Google sheet
Click the "Share" button and configure "Anyone with the link can view"
Press F12 to launch debugging tools in your web browser and select the "Net" tab.
Select "File -> Download As -> Comma-separated values .csv current sheet" (or whatever format you want, e.g. xlsx, ods, pdf, html, csv, or tsv)
Copy the URL of the GET request from the "Net" tab
It will look something like this:
https://docs.google.com/spreadsheets/d/KEY/export?format=csv&id=KEY&gid=SHEET_ID
Note, the "gid" parameter is the sheet ID, which you can find at the end of the URL of the open Google sheet.
Reference: https://developers.google.com/sheets/api/guides/concepts#sheet_id

This is a sample csv data can be downloaded. Download link for this data was made like this
Open google sheet-> Blank ->File->Open
Open file from "My Drive" or "Upload"
File -> Publish to the web -> "Sheet name" option and "csv" option

As of November 2020, the most elegant and simplest solution seems to be buried in #jrc's reply:
https://docs.google.com/spreadsheets/d/KEY/export?format=csv&gid=SHEET_ID
Here's a live example; given the Google Sheet that has a KEY of 1CTgM1g_aYoWFFpHU6A_qyqWGH0ulCFhs67uAcRVf1Rw
i.e: https://docs.google.com/spreadsheets/d/1CTgM1g_aYoWFFpHU6A_qyqWGH0ulCFhs67uAcRVf1Rw
To get the permalink to a CSV export of its first sheet (i.e. gid=0), append: /export?format=csv&gid=0:
https://docs.google.com/spreadsheets/d/1CTgM1g_aYoWFFpHU6A_qyqWGH0ulCFhs67uAcRVf1Rw/export?format=csv&gid=0
Note: if you're just exporting the first sheet, i.e. gid=0, then the URL is the same as the URL format posited in the original question, i.e.
(by default, the endpoint will assume gid=0 if it's left unspecified)
https://docs.google.com/spreadsheets/d/DOCID/export?format=csv

2021 update...
Question has been well answered in another post.
I'll add some things to look out for ...
On the "publish to web" there are:
Drop downs with options to choose the format and,
A choice on which sheets you want included,
Lastly a checkbox to ensure changes are republished
Publish to Web Google Sheets

I've developed an handy python command line application called google-sheets-to-csv few month ago: https://pypi.org/project/google-sheets-to-csv/ which allow to download multiple sheets at once.
Basic usage on linux (probably works on windows as well, I haven't test):
pip install google-sheets-to-csv
gs-to-csv <spreadsheet ID> <sheet selector (regex)> <output directory>
where:
<Spreadshhet ID>: is the weird data in the url https://docs.google.com/spreadsheets/d//
<sheet selector (regex)>: is a regular expression https://en.wikipedia.org/wiki/Regular_expression
<output directory> is an existing directory on your file system
To download all the sheets at once you can do:
mkdir output/
gs-to-csv DOCID ".*" output/
You'll find one file per sheet.
Do not miss details in the project README ( regarding authentification the current published token is not yet validated by google you'll get an authentification warning like in this video used for the validation process: https://youtu.be/7zacMyv_ooU?t=73) If are afraid you can read the code here https://gitlab.com/micro-entreprise/google-sheets-to-csv (it's Open source software!) or use a google service account.

The following URL format (as a template string) is the only one that worked from me:
`https://docs.google.com/spreadsheets/d/e/${id}/pub?output=csv&id=${id}&gid=${gid}`
This assumes the entire document has been published to the web.

Related

Google ImportXML from QGIS metadata file

I am trying to capture elements of an qmd file (that is xml markup) using Google Sheets importxml. Based on How to use importXML function with a file from Google Drive? I think I've got the file importing correctly but can't seem to capture any of the tags.
Here's what I am trying -
=importXML("https://drive.google.com/uc?id=1AI2C8hQnSOuuoyJXizYBszGmpMXW8xxT&export=download","\\identifier")
Here's what the qmd/xml file looks like
<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis version="3.9.0-Master">
<identifier>Z:/My Drive/Mangoesmapping/Spatial Projects/2019/DSC/132_Ongoing_Asset_Updates/Working/Sewerage_Updates/Sewerage_Manholes_InspectionShafts.TAB</identifier>
<parentidentifier>Sewerage Manhole Infrastructure</parentidentifier>
<language>AUS</language>
<type>dataset</type>
<title>Sewerage Manholes within Douglas Shire Council</title>
<abstract>Sewerage Manholes within Douglas Shire Council. Most data has been updated based on field work, review of existing AsCon files and discussion with council staff responsible for the assets in 2018/2019. In Port Douglas most of the infrastructure has been surveyed in. </abstract>
<keywords vocabulary="gmd:topicCategory">
<keyword>Infrastructure</keyword>
<keyword>Sewerage</keyword>
If I use
=importXML("https://drive.google.com/uc?id=1AI2C8hQnSOuuoyJXizYBszGmpMXW8xxT&export=download","*")
I get
But I really would like to just get the elements I want by placing the importxml for each tag in the cell I need it in.
You want to retrieve ### of <identifier>###</identifier> from https://drive.google.com/uc?id=1AI2C8hQnSOuuoyJXizYBszGmpMXW8xxT&export=download
I could understand like above. If my understanding is correct, how about this answer?
Issue:
In your question, the formula of =importXML("https://drive.google.com/uc?id=1AI2C8hQnSOuuoyJXizYBszGmpMXW8xxT&export=download","\\identifier") uses \\identifier as the xpath. From your data you want to retrieve the values, it seems that you are trying to retrieve ### of <identifier>###</identifier>.
In this case, in order to Selects nodes in the document from the current node that match the selection no matter where they are, // is required to be used instead of \\. This can be seen at the document of here.
Modified formula:
So =importXML("https://drive.google.com/uc?id=1AI2C8hQnSOuuoyJXizYBszGmpMXW8xxT&export=download","\\identifier") can be modified as follows.
=importXML("https://drive.google.com/uc?id=1AI2C8hQnSOuuoyJXizYBszGmpMXW8xxT&export=download","//identifier")
As other xpath, from your data in your question, you can also use the xpath of /qgis/identifier instead of //identifier. So you can also use the following formula.
=importXML("https://drive.google.com/uc?id=1AI2C8hQnSOuuoyJXizYBszGmpMXW8xxT&export=download","/qgis/identifier")
References:
IMPORTXML
XPath Tutorial

Google Sheet find cell by URL parameter

I have a database of elements, each element has its own QR Code. After reading the code I would like to be able to open the worksheet on a specific tab and jump to the appropriate cell (according to the element name). Calling a worksheet through a URL with the #gid parameter allows you to open a tab.... the "range" parameter allows you to jump to a specific cell.... and what if I want to search for an item by name? Something like: https://docs.google.com/spreadsheets/d/1fER4x1p.../edit#gid=82420100&search=element_name.... is it possible?
Google has not introduced this yet
But you can look into Google Script (Googles SpreadSheets macros like) to achieve this.
Also a simpler approach will be to just filter the data, but this will change your requirement obviously. For example you can create a Filter with the name you are looking for and then you will get the URL.
This is the URL to a Sample of this, it should open the
Spreadsheet and filter the data when loaded. This is the Icon to
look for to create the filters
here is some documentation for you to get started on Google App Script, but I don't have a direct link to let you know how to catch the parameters for it to process them. What I can tell you is that this is a much more complicated approach than just a URL because it involves programmatic processing on the Spreadsheet side.

post array of numbers to google spreadsheet using android

I need to upload array of numbers from android to a google spreadsheet. I have try this solution https://github.com/FoamyGuy/GoogleFormUploadExample/tree/master/src/com/makemyandroidapp/example/googlespreadsheet/post
its work well but it upload single argument as a spreadsheet form entry. what i need is to upload full array say 1000 element at once.
Make use of the ready made library Google Form Uploader created by one of our developer friend. This would help you in uploading the numbers to the Google Spreadsheet in bulk.
To use this library you need to find your form-id, and your entry id's from the 'Live Form' page source code. Once you have those ids you can upload data to a form like this:
GoogleFormUploader uploader = new GoogleFormUploader("1AYvV0gFgB1hBuoRKnMsXy1LyF8-Ce8VAshAtho6Z08s");
uploader.addEntry("1680144410", "Hello Word");
uploader.addEntry("1558298396", "From android app");
uploader.upload();
but fill in your own form-id and entry ids.

How to export all Issues and its contents (Full content) to excel in JIRA?

Here I can able to download only the fields / I can get the contents of only one particular issues to word.
JIRA : Using Latest version.
Logged in as Administrator.
I searched Google but could'nt find.
Go to Issues and make a filter that returns all the issues you want
In the top right corner, there is a Views menu item. Open it.
Select the Excel (all fields) option to export all issues to Excel
#user1747116 you can use the method described by Whim but you do not get all of the information out of an issue.
You do have a couple of options:
If you are versed in XML you can go to System->Import / Export Section -> Backup and it does a full backup of your JIRA instance in XML as described in this help post.
You can use the method described by Whim of simply going to the issues list and clicking on the 'export function', but ALSO before doing that using one of the add-ons that allows you to export comments as well. Plug-ins specifically mentioned in this help article are "All Comments", "JIRA Utilities", and "Last Comment".
Write a Crystal Report formatted in a way to export into Excel. We have done this to make the information both accessible to those not versed in SQL. We have in particular done this for
You write an SQL Query and go directly at the database, and saving to CSV. Note in JIRA 4 to 6 the schema changed and we had to redo several of our queries so keep this in mind. But this is one to get you started in JIRA 6. Note time log is in ([worklog] and File Attachments are in ([fileattachment]) and comments are in ([jiraaction]). Each of these tend to have multiple entries per issue so you will need to do further joins to get them all into the same query. This is also useful know how if you are doing it in a Crystal Report and then exporting to excel.
SELECT TOP 1000 _JI.ID
,_JI.pkey
,_JI.PROJECT
,_PRJ.pname
,_JI.REPORTER
,_JI.ASSIGNEE
,_JI.issuetype
,_IT.pname
,_JI.SUMMARY
,_JI.DESCRIPTION
,_JI.ENVIRONMENT
,_JI.PRIORITY
,_PRI.pname
,_JI.RESOLUTION
,_RES.pname
,_JI.issuestatus
,_IS.Pname
,_JI.CREATED
,_JI.UPDATED
,_JI.DUEDATE
,_JI.RESOLUTIONDATE
,_JI.VOTES
,_JI.WATCHES
,_JI.TIMEORIGINALESTIMATE
,_JI.TIMEESTIMATE
,_JI.TIMESPENT
,_JI.WORKFLOW_ID
,_JI.SECURITY
,_JI.FIXFOR
,_JI.COMPONENT
,_JI.issuenum
,_JI.CREATOR
FROM jiraissue _JI (NOLOCK)
LEFT JOIN PROJECT _PRJ ON _JI.Project = _PRJ.ID
LEFT JOIN ISSUESTATUS _IS ON _JI.issuestatus = _IS.ID
LEFT JOIN ISSUETYPE _IT ON _JI.issuetype = _IT.ID
LEFT JOIN PRIORITY _PRI ON _JI.Priority = _PRI.ID
LEFT JOIN RESOLUTION _RES ON _JI.Resolution = _RES.ID
Note: You could get rid of the redundant fields, but I left both in so you can see where they came from. You can also put a where clause for a single issue ID or limit the outputs to a particular project. The top 1000 only displays the first 1000 results. Remove that if you are comfortable with it returning everything. (We tens of thousands in our db so I put that in there).
Exporting all details to Excel using the built-in export feature is simply impossible. Excel export will not export you the comments, the attachment, change history, etc. As other answers mention the Excel output produced by JIRA is in fact an HTML file, which works in many situations, but doesn't if you need precise representation of data.
Our company built a commercial add-on called the Better Excel Plugin, which generates native Excel exports (in XLSX format) from JIRA data.
It is powerful alternative to the built-in feature, with major advantages and awesome customization. It really supports Excel analysis functionality, including formulas, charts, pivot tables- and pivot charts.
This was my solution.
I downloaded the file like this:
"Issues" > "Search for Issues"
"Export" button > "Excel (HTML, All Fields)"
After downloading the file, Excel (Microsoft Office Professional Plus 2013) was not opening the download Jira.xls file for me.
I worked around that by doing the following:
Change the ".xls" to ".html"
Open the new "Jira.html" file in Chrome
Highlight/Select the table contents of the exported Jira Issues
Copy and then paste into a new excel file
The Better Excel add-on is great (we use it) but it cannot do attachments (AFAIK). Another add-on, JExcel Pro, can.

How can I format a Google Sheets spreadsheet cell with the API?

My application generates a table of data and creates a new spreadsheet document in a user's Google Drive. How can I add formatting (color, font-weight, width, etc.) to individual cells? I can't seem to find any documentation, much less how I could implement this through the google-api-ruby-client.
Most of my findings date back to Google API mailing lists that state it isn't supported.
However, I found that another application accomplishes my desired result. An example of "Smartsheet" exporting a document to Google Drive:
From Smartsheet.com:
And the resulting sheet in my Google Drive:
(Feb 2017) As of Google I/O 2016, developers no longer need to export to Excel nor create a new Sheet w/the desired formatting, so the other answers are now dated. You can now format cells using the Google Sheets API. Here's a short Python example that bolds the 1st row (assuming the file ID is SHEET_ID and SHEETS is the API service endpoint):
DATA = {'requests': [
{'repeatCell': {
'range': {'endRowIndex': 1},
'cell': {'userEnteredFormat': {'textFormat': {'bold': True}}},
'fields': 'userEnteredFormat.textFormat.bold',
}}
]}
SHEETS.spreadsheets().batchUpdate(
spreadsheetId=SHEET_ID, body=DATA).execute()
I also made a developer video on this subject if that helps (see below). BTW, you can do the same in Ruby (see its API quickstart sample) or any other language supported by the Google APIs Client Libraries.
The Sheets API provides features not available in older releases, namely giving developers programmatic access to a Sheet as if you were using the user interface (frozen rows, cell formatting[!], resizing rows/columns, adding pivot tables, creating charts, etc.). If you're new to the API, I've created a few videos with somewhat more "real-world" examples:
Migrating SQL data to a Sheet plus code deep dive post
Formatting text using the Sheets API plus code deep dive post
Generating slides from spreadsheet data plus code deep dive post
To see what else you can do with Google Sheets via its REST API or Google Apps Script, check out my other videos. As you can tell, the Sheets API is primarily for document-oriented functionality as described above, but to perform file-level access such as import/export, copy, move, rename, etc., use the Google Drive API instead.
Smartsheet utilizes the ability of the Google API to import an Excel file. The code is roughly along these lines:
DocsService client = new DocsService(<YOUR APP NAME>);
client.setOAuthCredentials(<OAUTH PARAMETERS>);
DocumentListEntry newEntry = new SpreadsheetEntry();
newEntry.setMediaSource(new MediaByteArraySource(<EXCEL FILE BYTE ARRAY OUTPUT STREAM>, DocumentListEntry.MediaType.XLS.getMimeType()));
newEntry.setTitle(new PlainTextConstruct(<FILE NAME>));
DocumentListEntry insertedEntry = client.insert(new URL("https://docs.google.com/feeds/default/private/full/"), newEntry);
// This is your URL to the new doc
String docUrl = insertedEntry.getDocumentLink().getHref();
We already had the ability to export a Smartsheet to an Excel file with formatting via Apache POI. Adding export to a Google Spreadsheet was quite simple for us to implement and it provided some additional functionality beyond what you could do via the API.
Sorry for the delayed response - just happened across this question.
The APIs only provide access to the data and do not expose any methods to add formatting.
Another option (and the one that ended up using) is to manually create a Google Sheet file, with all of the formatting pre-configured, as a template. Then, instead of creating a new spreadsheet document in the user's Google Drive, copy the template, like so:
var config = require('./config');
var google = require('googleapis');
function createSheetFromTemplate(user, templateFileId, done) {
var oauth2Client = new google.auth.OAuth2(config.google.clientId, config.google.clientSecret);
oauth2Client.setCredentials({
access_token: user.google.token,
refresh_token: user.google.refreshToken,
});
var drive = google.drive({
version: 'v2',
auth: oauth2Client
});
drive.files.copy({
fileId: templateFileId,
resource: {
title: 'New Google Sheet',
parents: [{
id: 'root'
}]
}
}, function(err, response) {
if (err) done(err)
initializeSpreadsheet(response.id, user, done);
});
}
In that code, templateFileId is the file id of your shared template. You can get this fileId from your shared template file in any number of ways, but the quick-and-dirty way is just to copy-and-paste it out of the URL when you share it.
For instance, if the sharing URL is:
https://docs.google.com/spreadsheets/d/1234567890abcdefghijklmnop/edit?usp=sharing
Then the file id is 1234567890abcdefghijklmnop
In my case there is nothing private in the template itself, so I just shared it with 'anyone with the link' configured for 'can view', as described here:
https://support.google.com/drive/answer/2494886
If you need to keep the contents of the template file private, then you'll need to find some way to ensure that the account specified by config.google.clientId has access to it.
Hope that helps!
If, like me, uploading a pre-formatted Excel sheet isn't sufficient, then Google Apps Script looks like it might be the way to go. The Range class specifically lets you manipulate at least some of the formatting you were asking about.
https://developers.google.com/apps-script/reference/spreadsheet/range
setFontColor() and setFontWeight() are there, but I don't know of anything for cell width yet.
Importantly, I have also not yet figured out how to bind a Google Apps Script to the sheet that I'm creating using the Google Drive API SDK (Node/Javascript in my case, Ruby in yours).
https://developers.google.com/apps-script/guides/bound
It's been a while since your question, so I'm betting you've already solved it some other way. I'm also not necessarily suggesting porting everything in your app over to Google Apps Script (although I'm seriously considering it myself...), but if you or some other reader figures out how to bind a Google App Script to a spreadsheet with the google-api-ruby-client, you might be good-to-go.

Resources