【问题标题】:Rename file name in Google Sheets with Google Apps Script使用 Google Apps 脚本重命名 Google 表格中的文件名
【发布时间】:2020-05-05 17:01:14
【问题描述】:
我正在查找有关如何更改工作表名称甚至在云端硬盘中命名和放置文件副本的信息,但是有没有简单的方法可以将单元格中的字符串添加到文件名中(没有副本,只是替换当前的)?我有一个脚本来清除某些单元格,并且将包含此单元格,因此计划在清除后此文件名将返回默认标题。很抱歉没有任何示例可以分享,因为我不确定应该从什么开始。
澄清一下:这样做的原因是我们在填写完表格后下载了表格,然后将其清除以进行下一个任务。例如,这只是为了帮助自动化将案例编号添加到文件名的任务。
【问题讨论】:
标签:
google-apps-script
google-sheets
【解决方案1】:
我希望我正确理解了您的问题,但我认为应该这样做。您将单元格 A1(= 第 1 行,第 1 列)中的值添加到当前活动电子表格的标题中。
function changeSpeadsheetName()
{
var sheet = SpreadsheetApp.getActiveSpreadsheet();
var range = sheet.getActiveSheet().getRange(1, 1).getValue(); //assuming you want to add the string in A1 to your title
var name = sheet.rename('I renamed my spreadsheet into ' + range);
}
【解决方案2】:
此功能将允许您设置电子表格文件名:
function onOpen() {
SpreadsheetApp.getUi().createMenu('CaseMenu')
.addItem('Change Case Number', 'changeCaseNumber')
.addToUi();
}
function changeCaseNumber() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getSheetByName('Cases');
const rg=sh.getDataRange();
var vA=rg.getValues();
var tObj={};
vA.forEach(function(r,i){
tObj[r[0]]=r[1];
});
let r=SpreadsheetApp.getUi().prompt("Get Case Number", "Enter Case Number", SpreadsheetApp.getUi().ButtonSet.OK_CANCEL);
if(r.getSelectedButton()==SpreadsheetApp.getUi().Button.OK) {
tObj.number=r.getResponseText();
//DriveApp.getFileById(ss.getId()).setName(Utilities.formatString('%s - %s',tObj.prefix,tObj.number));
ss.rename(Utilities.formatString('%s - %s',tObj.prefix,tObj.number));
setCases(tObj);
}
}
function setCases(dfltObj){
var dfltH=Object.keys(dfltObj).length;
if(dfltObj){
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Cases');
var rg=sh.getRange(1,1,dfltH,2);
var vA=rg.getValues();
for(var i=0;i<dfltH;i++){
vA[i][1]=dfltObj[vA[i][0]];
}
rg.setValues(vA);
}
}
我使用隐藏表来创建此表:
您可以使用前缀设置电子表格标题的开头,然后您可以运行函数 changeCaseNumber() 来更改电子表格名称的第二部分。
如果您希望可以相当轻松地修改确切的字符串配置,因为我使用了 Utilties.formatString() 来构建标题,并且它使用了许多程序员都熟悉的 sprintf 格式。它还记录您的最后一个案例编号和您当前的基本标题。如果您愿意,您可以通过进入电子表格“案例”轻松更改它。