gpt4 book ai didi

google-apps-script - 每次进行编辑时将 Google 电子表格导出为 .XLSX

转载 作者:行者123 更新时间:2023-12-02 17:42:10 24 4
gpt4 key购买 nike

我想要一个 Google 脚本,它可以在进行编辑时自动将电子表格导出到 .XLSX,覆盖任何以前的版本。使用this answer作为模板,我创建了以下代码:

function onEdit() {
var s = SpreadsheetApp.getActiveSheet();
var r = s.getActiveCell();
if( r.getColumn() != 1 ) { //checks the column
var row = r.getRow();
var time = new Date();
time = Utilities.formatDate(time, "GMT-08:00 ", "MM/dd/yy, hh:mm:ss");
SpreadsheetApp.getActiveSheet().getRange('A' + row.toString()).setValue(time);

var id = 'MY_SPREADSHEET_KEY'
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 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"};
}

但是,它似乎没有导出。或者,如果它正在导出,我不确定这是在哪里发生的。

有什么想法吗?

最佳答案

由于 Serge 的一些脚本由于 Google API 的变化而不再可用,我发布了我的脚本,它基本上将当前电子表格导出到 xlsx(请注意导出到 xls 不受支持)并将其保存到名为 Exports 的文件夹中。在执行此操作之前,它会删除之前的 xlsx 文件并仅保留最新的文件,因此您无需计算时间或更改任何单元格:

function exportAsxlsx() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var spreadsheetId = spreadsheet.getId()
var file = Drive.Files.get(spreadsheetId);
var url = file.exportLinks[MimeType.MICROSOFT_EXCEL];
var token = ScriptApp.getOAuthToken();
var response = UrlFetchApp.fetch(url, {
headers: {
'Authorization': 'Bearer ' + token
}
});

var blobs = response.getBlob();
var folder = DriveApp.getFoldersByName('Exports');
if(folder.hasNext()) {
var existingPlan1 = DriveApp.getFilesByName('newfile.xlsx');
if(existingPlan1.hasNext()){
var existingPlan2 = existingPlan1.next();
var existingPlanID = existingPlan2.getId();
Drive.Files.remove(existingPlanID);
}
} else {
folder = DriveApp.createFolder('Exports');
}
folder = DriveApp.getFoldersByName('Exports').next();
folder.createFile(blobs).setName('newfile.xlsx')
}

如果没有特定文件夹,它还会创建特定文件夹。您可以使用这些命令并查看这些类是如何工作的。请注意,您需要通过将 Resources -> Advanced Google Services -> Drive API 切换为 on 以及 Google Developers Console 来启用 D​​rive API(请参阅详细说明here)。我还设置了一个简单的触发器,在每次编辑时调用此函数。这可以通过以下方式完成:Resources -> Current project's triggers -> Add a new trigger。您不需要添加任何库。

关于google-apps-script - 每次进行编辑时将 Google 电子表格导出为 .XLSX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398819/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com