我想要一个Google Apps脚本,通过使用触发器自动将我在Google云端硬盘上的Google电子表格导出到.xls
或.xlsx
时间驱动(比方说每30分钟)或事件驱动(每次编辑都存档)。我基于Stack Overflow上的旧问题here,但因为函数oAuthConfig
是
停止了,我想我会打开一个基于OAuth1
库的新线程。
以下是我遵循的所有步骤:
文件打开后,我转到Tools -> Script Editor...
然后我按照这些instructions安装了最新的OAuth1
库(第12版和图书馆)
我使用的项目密钥是Mb2Vpd5nfD3Pz-_a-39Q4VfxhMjh3Sh48
)。我也试过Development mode
启用或禁用。
我运行了除googleOAuth_(...)
之外的所有功能,并授予了他们要求的任何权限。
最后,我从Resources -> Current project's triggers
创建了一个触发器,在每次编辑电子表格时调用函数myOnEdit
,如果失败则通过电子邮件通知我。
这是脚本:
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"};
}
因此,代码似乎没有产生任何错误,但有2个问题:
即使创建了文件newfile.xls
,也不是我想要的。基本上,当我在Excel上打开它时,我得到了消息"" newfile.xls"的文件格式和扩展名。不匹配。该文件可能已损坏或不安全。除非你相信它的来源,否则不要打开它。你想打开它吗?",然后等待一段时间,当文件打开时,它似乎是Excel格式的Google登录页面。
每次我对一行进行编辑时,与该行第一列对应的单元格会更改为当前时间戳,例如" 07/03 / 16,03:58:30&#34 ;在...上 原始电子表格。
答案 0 :(得分:1)
要定期在Google云端硬盘上生成XLSX文件,您可以设置一个定时触发器,根据How to convert a Google Docs-File to an Excel-File (XLSX)中引用的要点调用test_downloadXLS()
函数。
答案 1 :(得分:0)