第一次发帖;在脚本方面很生疏;到处找不到解决以下问题的办法,我想这是最基本的......
在一个G表中,我需要创建一个G-Drive文件夹中所有文件的列表。在这个列表中,每个文件都要用包含在每个文件名中的项#来标记;这些项#遵循一致的字符模式(如AB123A),可以用regex'[a-zA-Z]{2}[0-9]{3}[a-zA-Z]'来描述。文件可以这样命名。
"Merch Bin 1 - CC554A - 3.15.20"
"AB101C - Web"
我已经开始用下面的脚本从文件夹中按顺序获取文件名,并设置在第1列的空行中,但我不知道如何修改它,使之只从文件名中提取#项&并据此设置。
function listitems(){
var ss=SpreadsheetApp.getActiveSheet();
var folder=DriveApp.getFolderById(‘Folder ID');
var contents=folder.getFiles();
var file;
var item;
while(contents.hasNext()){
file=contents.next();
item=file.getName(); //Assume this is where to apply any regex extract functionality to extract the item # from the file name
ss.appendRow([item]); //Intended to set item #'s extracted from file names to col.1 of 1st empty row
}
}
感谢任何帮助&指导。
所以,从你建议的匹配条件开始。[a-zA-Z]{2}[0-9]{3}[a-zA-Z]
你需要声明一个新的变量。var re =new RegExp("[a-zA-Z]{2}[0-9]{3}[a-zA-Z]");
在循环浏览文件后,你需要检查你的条件。
if(item.match(re)){output.push([item, link])};
通过下面的脚本,你可以选择从哪个文件夹中列出文件 同样也可以选择在哪个工作表中写入数据。
代码。
// Create a menu to run the script
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('List Files')
.addItem('Go!', 'listMyFiles')
.addToUi();
}
function listMyFiles() {
var folder = DriveApp.getFolderById('FOLDER ID GOES HERE');
var sheetId = "SHEET ID GOES HERE";
//Set up spreadsheet
var ss = SpreadsheetApp.openById(sheetId);
// specify the name of the sheet to write the DATA
var sheet = ss.getSheetByName("Sheet1");
var re =new RegExp("[a-zA-Z]{2}[0-9]{3}[a-zA-Z]");
sheet.getRange("A2:B").clear();
var output = [];
var file;
var item;
var link;
var contents = folder.getFiles();
while(contents.hasNext()) {
file = contents.next();
data = [
item = file.getName(),
link = file.getUrl(),
];
if(item.match(re)){
output.push([item, link]);
}
// write data to the sheet
sheet.getRange(2, 1, output.length, output[0].length).setValues(output);
}
};
你的工作表会类似于这样:
脚本已经 "忽略 "了其他文件 只带来符合条件的文件。
谢谢大家,在你们的指导下,我似乎已经尽我有限的能力解决了这个问题......。
通过在第18行添加执行函数(re.exec(filename);),脚本成功地从文件名中提取了regex定义的项目#,并将其写入指定的范围(A2 + down)。
function listitems(){
var ss=SpreadsheetApp.getActiveSheet();
var re=new RegExp("[a-zA-Z]{2}[0-9]{3}[a-zA-Z]");
var output=[];
//CLEAR RANGE
var listrange=ss.getRange("A2:O")
listrange.clearContent();
//SET FILE LIST
var folder=DriveApp.getFolderById(‘Folder ID');
var contents=folder.getFiles();
var file;
var item;
while(contents.hasNext()){
file=contents.next();
filename=file.getName();
item=re.exec(filename);
output.push([item]);
ss.getRange(2,1,output.length,output[0].length).setValues(output);
}
}
我接下来的困扰是想办法在脚本端将项#单元格链接到对应的文件,而不是将项#和文件URL都写到工作表中,然后应用=hyperlink()公式,所以我将在本帖之外探讨这些技巧。
欢呼吧