2016-07-03 14 views
0

Ich möchte ein Google Apps Script, das eine Google-Tabelle automatisch exportiert, die ich auf Google Drive müssen .xls oder .xlsx durch einen Trigger verwenden, die entweder zeitgesteuert (zB alle 30 Minuten) oder ein Ereignis ist -driven (bei jeder Bearbeitung in der Datei). Ich basierte auf einer alten Frage here auf Stack Overflow, aber da die Funktion oAuthConfig ist eingestellt, ich denke, ich würde einen neuen Thread basierend auf OAuth1 Bibliothek öffnen.automatisch exportieren Google-Tabelle in Excel

Hier sind alle Schritte, die ich gefolgt:

  1. Während die Datei geöffnet war ich zu Tools -> Script Editor... ging und dann folgte ich diese instructions die neueste OAuth1 Bibliothek (v.12 und die Bibliothek Projektschlüssel zu installieren Ich verwendete ist). Ich habe auch versucht mit Development mode aktiviert oder deaktiviert.

  2. Dann habe ich versucht, das Skript auf alle Änderungen der Google API basiert zu ändern (siehe here, here, here und here).

  3. Ich lief jede Funktion außer googleOAuth_(...) und gewährte, was für Berechtigungen sie verlangten.

  4. Schließlich habe ich einen Trigger von Resources -> Current project's triggers erstellt, die die Funktion myOnEdit bei jeder Bearbeitung in die Tabelle ruft und benachrichtigt mich per E-Mail, wenn es fehlschlägt.

Hier ist das Skript:

function myOnEdit() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s = ss.getActiveSheet(); 
    var r = s.getActiveCell(); 
    if(r.getColumn() != 1) { //checks the column 
    var row = r.getRow(); 
    var time = new Date(); 
    time = Utilities.formatDate(time, ss.getSpreadsheetTimeZone(), "MM/dd/yy, hh:mm:ss"); 
    var id = ss.getId(); 
    s.getRange('A' + row.toString()).setValue(time); 
    var url = 'https://docs.google.com/feeds/'; 
    var doc = UrlFetchApp.fetch(url+'download/spreadsheets/Export?key='+id+'&exportFormat=xls', 
           googleOAuth_('docs',url)).getBlob() 
    DriveApp.createFile(doc).setName('newfile.xls') 
    } 
} 

function authorise(){ 
    // function to call to authorize googleOauth 
    var id=SpreadsheetApp.getActiveSpreadsheet().getId(); 
    var url = 'https://docs.google.com/feeds/'; 
    var doc = UrlFetchApp.fetch(url+'download/spreadsheets/Export?key='+id+'&exportFormat=xls', 
          googleOAuth_('docs',url)).getBlob() 
} 

function googleOAuth_(name,scope) { 
    var service = OAuth1.createService(name); 
    service.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope); 
    service.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken"); 
    service.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken"); 
    service.setConsumerKey('anonymous'); 
    service.setConsumerSecret('anonymous'); 
    return {oAuthServiceName:name, oAuthUseToken:"always"}; 
} 

So scheint es, dass der Code keine Fehler produzieren, aber es gibt zwei Probleme:

  1. Auch wenn die Datei newfile.xls ist geschaffen, es ist nicht was ich will. Grundsätzlich, wenn ich es auf Excel öffne bekomme ich die Meldung "Das Dateiformat und die Erweiterung von" newfile.xls "stimmen nicht überein. Die Datei könnte beschädigt oder unsicher sein. Wenn Sie der Quelle nicht vertrauen, öffnen Sie sie nicht Willst du es trotzdem öffnen? ", dann wartet es eine Weile und wenn die Datei geöffnet wird, erscheint es wie die Google Login-Seite im Excel-Format.

  2. Jedes Mal, wenn ich eine Zeile ändere, ändert sich die Zelle, die der ersten Spalte dieser Zeile entspricht, zum aktuellen Zeitstempel wie "07/03/16, 03:58:30" in der ursprünglichen Tabelle .

+0

Wenn Sie die Datei manuell in XLSX exportieren, können Sie sie öffnen? Haben Sie in Erwägung gezogen, den Inhaltsdienst anstelle von UrlFetch zu verwenden? –

+0

@Ruben Ja kann ich. Entweder auf dem Weg, den Sie vorgeschlagen haben, oder über das 'File'-Menü. – mgus

+0

Related: http://Stackoverflow.com/questions/31809987/google-app-scripts-email-a-spreadsheet-as-excel –

Antwort

0

Teil Kurze Antwort

XLS wird nicht von Google Sheets/Google Drive unterstützt.

Erklärung

AFAIK .XLS wird nicht von der aktuellen Version von Google Tabellen unterstützt.Auf jeden Fall habe ich versucht, nur eine URL mit der folgenden Struktur direkt auf die Adressleiste des Browsers:

https://docs.google.com/spreadsheets/d/spreadsheet-key/export?exportFormat=xls 

und bekam

Sorry, unable to open the file at this time error message

+0

OK, das ist richtig. Aber wenn Sie 'xls' durch' xlsx' ersetzen, werden Sie sehen, dass dies unterstützt wird. Ich habe das auch am Skript versucht (alle Vorkommnisse wurden ersetzt), aber diesmal konnte ich die Datei nicht einmal öffnen. Ich habe den Fehler "Excel kann die Datei 'Dateiname.xlsx' nicht öffnen, da das Dateiformat für die Dateierweiterung nicht gültig ist. Stellen Sie sicher, dass die Datei nicht beschädigt ist und dass die Dateierweiterung mit dem Format der Datei übereinstimmt." Es muss also ein Problem im Skript geben. – mgus

+1

Wie Sie sehen können, ist meine Antwort eine teilweise Antwort, da ich nur eines der Probleme mit dem Skript erwähnt habe. –

Verwandte Themen