google-apps-script - 替换 Sheet 中的 Reference DOCS 文件名。文件
问题描述
这是我的例子:
Sheet file with ID:
1uxEy8cPkNQVBVAFSHPBhvq0aRgRVZ0z2_I1AxK0gcuI
有 2 列: A 列:包含要替换的单词,例如:
“A1”:Le Minh Hai,“A2”:ABC,“A3”:HAIBA
B 列:包含您要替换的单词,例如:
“B1”:阮黎明,“B2”:CDE,“B3”:BAAAA
有一个文件名为
这是Le Minh Hai的档案
我希望将其更改为:
这是 Nguyen Le Minh 的档案
如果有一个不同名称的文件
这是ABC文件
它会变回
这是一个 CDE 文件
其他文件也一样
代码:
function getNewestFileInFolder() {
var arryFileDates,file,fileDate,files,folder,folders,
newestDate,newestFileID,objFilesByDate;
folders = DriveApp.getFoldersByName('bvm-hd');
while (folders.hasNext()) {
folder = folders.next();
files = folder.getFilesByType("application/vnd.google-apps.document");
while (files.hasNext()){
file = files.next();
var newestFileID = file.getId();
var currentDoc = DocumentApp.openById(newestFileID);
var ss = SpreadsheetApp.openById('1t9T5FWedPLFcQ6wqcx4gGRHrrpldZHcLhgBJR0JbrPI');//ID sheet find and replace
SpreadsheetApp.setActiveSpreadsheet(ss);
SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);
var sh = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Trang tính1');
var dongcuoi= sh.getLastRow();
var dc = dongcuoi +1;
var doc = DocumentApp.openById(newSp.getId());
var rgtxt = doc.getName();
var rgrep = ss.getSheets()[0].getRange("A1:B"+dc);
var repA = rgrep.getValues().filter(r => r.every(c => c.toString()));
repA.forEach(e => rgtxt.replaceText(...e));
}
}
}
解决方案
我相信你的目标如下。
- 您想使用电子表格重命名特定文件夹中的 Google 文档的文件名。
- 您想要将现有文件名(包括“A”列的值)更改为“B”列的值。
- 例如,当文件名是 时
This is the file of Le Minh Hai
,您想将其更改为This is Nguyen Le Minh's file
.
在这种情况下,下面的修改脚本怎么样?
修改后的脚本:
function getNewestFileInFolder() {
var ss = SpreadsheetApp.openById('1t9T5FWedPLFcQ6wqcx4gGRHrrpldZHcLhgBJR0JbrPI');
var sheet = ss.getSheetByName('Trang tính1');
var values = sheet.getDataRange().getValues();
var folders = DriveApp.getFoldersByName('bvm-hd');
while (folders.hasNext()) {
var folder = folders.next();
var files = folder.getFilesByType("application/vnd.google-apps.document");
while (files.hasNext()) {
file = files.next();
var filename = file.getName();
var check = values.filter(([a]) => filename.includes(a));
if (check.length > 0) {
file.setName(filename.replace(check[0][0], check[0][1]));
}
}
}
}
- 从您的脚本中,我担心可能存在文件夹名称为
bvm-hd
. 所以我使用 while 循环来检索文件夹。 - 可以通过一次调用从电子表格中检索这些值。所以在这个修改后的脚本中,这个脚本被移到了循环之外。
- 为了更改文件名,您可以使用Class File 的
getName
和setName
。
参考:
推荐阅读
- java - 为什么序列化/反序列化几何类型时杰克逊 JSON 映射异常
- javascript - 如何制作一种将项目推送到带有点亮元素的空数组的方法
- ruby-on-rails - Rails 6 with ancestry gem:显示整个树,从根到最后一个子类别
- react-router-v4 - React Router V4 从 url 恢复导航状态
- ruby-on-rails - Sidekiq - 获取另一个工作人员所做的数据库更改
- c# - C# MVC 禁用将控制器方法名称绑定到模型的 Action 属性
- javascript - javascripts是否可以有带有ID的hrefs?
- json - For 循环仅返回第一个 json 对象 Flutter
- python - 在链接比较运算符python中分离表达式
- laravel - Laravel while empty collection 在过滤器中添加新参数以获取 notEmpty 集合