我有一个 Google Sheet 数组,其中列出了每件待售商品的详细信息。第一列是每个项目的标准化参考代码(ABC####,例如“ABC0001”、“ABC0002”等)。我单独为每个项目创建一个单独的定制规格表 (pdf) 并将其存储在 Google 云端硬盘中。
各个规格的文件名基于标准化模式(年份型号参考代码“规格”,例如“2014 Cherokee ABC0001 规格”)。文件夹有 3 层深度,并遵循以下一般格式。
Top Level (Let's call it "Cars For Sale")
---> Cherokee
------> 2014 Cherokee ABC0001
---------> 2014 Cherokee ABC0001 Sales Package (allowed to be shared publicly)
------------> 2014 Cherokee ABC0001 specs file (this is what the Google Sheet needs to hyperlink)
------> 2011 Cherokee ABC0042
---------> 2011 Cherokee ABC0042 Sales Package (allowed to be shared publicly)
------------> 2011 Cherokee ABC0042 specs file (this is what the Google Sheet needs to hyperlink)
---> Mustang
------> 2001 Mustang ABC0027
---------> 2001 Mustang ABC0027 Sales Package (allowed to be shared publicly)
------------> 2001 Mustang ABC0027 specs file (this is what the Google Sheet needs to hyperlink)
我正在寻找一个公式或脚本,它使用我的 Google 表格中的参考代码(例如 ABC0001),在我的 Google 云端硬盘中搜索规范,然后直接创建指向该文件的内部(非共享)超链接。这样,一旦我创建了规范,Google 表格就会自动链接到该规范,以便我可以在销售电话中快速参考它。我希望能够单击 A 列中的“ABC0001”参考代码,它会在新选项卡中打开 pdf 规范文件。
如果已经有一个脚本可以执行此操作,请告诉我。
我已经有另一列使用以下公式链接到另一个包含该项目技术详细信息的 Google 表格。不确定我是否可以调整它来完成我需要的事情或者是否有更简单的方法?
=ifna(HYPERLINK(CONCATENATE("docs.google.com/spreadsheets/d/",indirect(CELL("address",INDEX('Filenames Script'!$B:$B,MATCH(concatenate("*",$A2,"*"),'Filenames Script'!$A:$A,0))))),IMPORTRANGE(indirect(CELL("address",INDEX('Filenames Script'!$B:$B,MATCH(concatenate("*",$A2,"*"),'Filenames Script'!$A:$A,0)))),"Output!$B$1")))
我有一个名为“文件名脚本”的脚本,它列出了每个文件,但仅在一个特定的目录级别中。
function listFilesInFolder(id) {
var folderId = "xxxxxxxxxxxxxxxxxxx"; // Please set the folder ID. If you want to use "id" for this, you can use var folderId = id;
// 1. Retrieve file list using Drive API.
var ar = [["Name", "ID", "Date", "Size"]];
var pageToken = "";
do {
const res = Drive.Files.list({corpora: "allDrives", includeTeamDriveItems: true, supportsAllDrives: true, maxResults: 1000, pageToken: pageToken, q: `'${folderId}' in parents`});
ar = ar.concat(res.items.map(({title, id, createdDate, fileSize}) => [title, id, createdDate, fileSize || 0]));
pageToken = res.nextPageToken;
} while(pageToken);
// 2. Put the file list to Spreadsheet.
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName("Filenames Script");
sheet.clear();
sheet.getRange(1, 1, ar.length, ar[0].length).setValues(ar);
}
您想要将鼠标悬停在代码上并打开特定的 PDF 文件。
可能有很多方法可以做到这一点。在此答案中,脚本(通过使用自定义菜单触发)将代码从文本转换为超链接公式。如果将新代码添加到列表中,只需重新运行脚本(从菜单中)即可。
脚本逻辑是:
function onOpen(e) {
// Add a custom menu to the spreadsheet.
SpreadsheetApp.getUi()
.createMenu('Custom Menu')
.addItem('Update Code links', 'linkPDF')
.addToUi();
}
function linkPDF() {
var ss = SpreadsheetApp.getActiveSpreadsheet()
var salesSheet = ss.getSheetByName("Sales")
var range = salesSheet.getDataRange()
var data = range.getValues()
for (var i=1;i<data.length;i++){
var code = data[i][0]
var name = data[i][1]
// 2011 Cherokee ABC0042 specs
var fileName = name+" "+code+" specs.pdf"
// Logger.log("DEBUG: i: "+i+", code: "+code+", name: "+name+", file name: "+fileName)
var files = DriveApp.getFilesByName(fileName)
while (files.hasNext()) {
var file = files.next();
// Logger.log("DEBUG: File name: "+file.getName()+", file url: "+file.getUrl())
salesSheet.getRange(i+1,1).setFormula('=HYPERLINK("' + file.getUrl() + '", "' + code + '")')
}
}
}
示例 - 之前
示例 - 之后