そうではありませんでした!おそらく、oAuth 関数が適切な承認を得られなかったことと、単純な onEdit がこの種の操作を行うことが許可されていないことが原因です。
インストール可能なトリガーを作成する必要があります( menu>ressource>current trigger>create )。
以下のスクリプトを試して、authorize
関数を実行してください。
いくつかの詳細も変更しました。timeZone
スプレッドシートから直接id
取得され、アクティブなスプレッドシートからも取得されます。
また、新しく作成された XLSX は以前のファイルを上書きしないことに注意してください。同じ名前のドキュメントが多数取得されます。最新バージョンのみを保持したい場合は、自分でそれを処理し、すべてのドキュメント名「新しいファイル」を取得して、新しいファイルfile.setTrashed(true)
を作成する前に使用して削除する必要があります。
これは、次の 2 行のコードと同じくらい簡単です。
var oldVersions = DocsList.find('newfile.xls');
for(var d in oldVersions){oldVersions[d].setTrashed(true)};
コード :
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()
DocsList.createFile(doc).rename('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 oAuthConfig = UrlFetchApp.addOAuthService(name);
oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oAuthConfig.setConsumerKey('anonymous');
oAuthConfig.setConsumerSecret('anonymous');
return {oAuthServiceName:name, oAuthUseToken:"always"};
}
EDIT :あなたのコメントに続いて、これは 30 秒ごとにのみ保存するバージョンです (編集が行われていない場合はそれ以上)。必要に応じて、時間の値を別の間隔に簡単に変更できます。
承認機能を再実行して、scriptProperty を初期化します。
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 lastSaveTime = new Date(Utilities.jsonParse(ScriptProperties.getProperty('exportTime')));
var now = new Date().getTime();
Logger.log(now - lastSaveTime.getTime())
if (now - lastSaveTime.getTime() > 60000){ // delete every minute
var oldVersions = DocsList.find('newfile.xls');
for(var d in oldVersions){oldVersions[d].setTrashed(true)};
}
if (now - lastSaveTime.getTime() > 30000){ // save every 30"
var url = 'https://docs.google.com/feeds/';
var doc = UrlFetchApp.fetch(url+'download/spreadsheets/Export?key='+id+'&exportFormat=xls',
googleOAuth_('docs',url)).getBlob()
DocsList.createFile(doc).rename('newfile.xls')
ScriptProperties.setProperty('exportTime',Utilities.jsonStringify(new Date()));
}
}
}
function authorise(){
// function to call to authorize googleOauth + initialize the TIMER
ScriptProperties.setProperty('exportTime',Utilities.jsonStringify(new Date()));
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 oAuthConfig = UrlFetchApp.addOAuthService(name);
oAuthConfig.setRequestTokenUrl("https://www.google.com/accounts/OAuthGetRequestToken?scope="+scope);
oAuthConfig.setAuthorizationUrl("https://www.google.com/accounts/OAuthAuthorizeToken");
oAuthConfig.setAccessTokenUrl("https://www.google.com/accounts/OAuthGetAccessToken");
oAuthConfig.setConsumerKey('anonymous');
oAuthConfig.setConsumerSecret('anonymous');
return {oAuthServiceName:name, oAuthUseToken:"always"};
}