Экспорт электронной таблицы Google в виде xlsx с использованием javascript

Похоже, что с новой версией электронной таблицы Google больше невозможно загрузить всю электронную таблицу Google с помощью JS. До сих пор я использовал этот метод (который все еще отлично работает для файлов, которые были созданы ранее):

 var xhr = new XMLHttpRequest();
 xhr.open('GET', 'https://docs.google.com/feeds/download/spreadsheets/Export?key=' + id + '&exportFormat=xlsx');

 xhr.responseType = 'arraybuffer';
 xhr.setRequestHeader('Authorization', 'Bearer ' + gapi.auth.getToken().access_token);

 xhr.onload = function() {
      ...
 };

 xhr.send();

Я нашел новый URL для скачивания:

https://docs.google.com/spreadsheets/d/_ID_/export?format=xlsx&id=_ID_

Но, к сожалению, заголовка Access-Control-Allow-Origin нет, поэтому ссылка недоступна с помощью JS. Есть ли другая возможность скачать файл?

API Google Диска отображает URL-адрес экспорта как:

https://docs.google.com/spreadsheets/export?id=_ID_&exportFormat=xlsx

Но заголовка Access-Control-Allow-Origin тоже нет.

Есть ли другая возможность загрузить этот файл, используя только JS?


person Nazin    schedule 05.05.2014    source источник


Ответы (1)


Вы должны иметь возможность скачать его, используя этот URL:

https://docs.google.com/spreadsheet/pub?key=XXX&output=xls

Я создал пример, который работает здесь:

var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function () {
    if (this.readyState === 4 && this.status === 200) {
        console.log('success', this.responseText.length);
    }
};
xhr.open('GET', 'https://docs.google.com/spreadsheet/pub?key=0AsnymCBa0S5PdEtZdnEzcjlTenBIcldRNFMtSUdNUkE&output=xls', true);
xhr.send(null);

http://jsfiddle.net/kmturley/b47wno47/

person Kim T    schedule 07.01.2015
comment
Это будет работать только для общедоступных электронных таблиц. Я рассматриваю частный код в своих состояниях вопроса. - person Nazin; 09.01.2015
comment
Для частных электронных таблиц вам необходимо использовать API Google Диска для аутентификации перед получением электронной таблицы. - person Kim T; 09.01.2015
comment
О, не говорите... как вы думаете, откуда взялся gapi.auth.getToken().access_token? - person Nazin; 09.01.2015
comment
Какое значение я бы использовал для ключа? Идентичен ли он ID в исходном вопросе? - person jochen; 06.05.2015
comment
@jochen да, вы используете идентификатор электронной таблицы в качестве ключа, и электронная таблица должна быть общедоступной - person Kim T; 07.05.2015