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:
Während die Datei geöffnet war ich zu
Tools -> Script Editor...
ging und dann folgte ich diese instructions die neuesteOAuth1
Bibliothek (v.12 und die Bibliothek Projektschlüssel zu installieren Ich verwendete ist). Ich habe auch versucht mitDevelopment mode
aktiviert oder deaktiviert.Dann habe ich versucht, das Skript auf alle Änderungen der Google API basiert zu ändern (siehe here, here, here und here).
Ich lief jede Funktion außer
googleOAuth_(...)
und gewährte, was für Berechtigungen sie verlangten.Schließlich habe ich einen Trigger von
Resources -> Current project's triggers
erstellt, die die FunktionmyOnEdit
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:
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.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 .
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? –
@Ruben Ja kann ich. Entweder auf dem Weg, den Sie vorgeschlagen haben, oder über das 'File'-Menü. – mgus
Related: http://Stackoverflow.com/questions/31809987/google-app-scripts-email-a-spreadsheet-as-excel –