Експортиране на електронна таблица на 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 Drive за удостоверяване, преди да извлечете електронна таблица - 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 да, вие използвате ID на електронната таблица като ключ и електронната таблица трябва да бъде зададена като публична - person Kim T; 07.05.2015