簡體   English   中英

希望通過apps腳本將google drive中新創建的模板文件夾的鏈接添加到google sheet的特定單元格中

[英]Want the link of the newly created template folder in google drive to add in the specific cell of google sheet through apps script

每當我通過 HTML 表單將新客戶端添加到工作表時,我有一個腳本可以在驅動器中創建客戶端的文件夾、子文件夾和工作表。 我正在尋找一種在 K 列中為該新創建的文件夾添加鏈接的方法,並在具有編輯權限的客戶端 email 上共享指向該文件夾的鏈接。

這是在驅動器中添加模板文件夾的代碼。 順便說一句,我對應用程序腳本很陌生。 所以我只是在學習和接受專家的指導。 熱烈感謝任何幫助。

function createClientAccountFolder(clientNamefolder, costingSheetId, ProposalDocId, renamesheet) {
  // This is the root directory where all the client folders would be stored
  const customerRoot = DriveApp.getFolderById('folder_id');

 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var databaseSheet = ss.getSheetByName("Clients");
 var lastAvailableRow = databaseSheet.getLastRow();
 const clientName = databaseSheet.getRange(lastAvailableRow, 2).getValue();

 if (clientNamefolder) {
  // This creates the main folder with the customer name
  const clients_sheet = ss.getRange("K2:K" + lastAvailableRow);
  const mainFolder = customerRoot.createFolder(clientNamefolder);
  var folder_url = mainFolder.getUrl();

  // have tried a way to add the link in cell
  clients_sheet.setFormula('=HYPERLINK("' + mainFolder.getUrl() + '")');

  

  // Creating the sub folders
  // Some are assigned to variables so that later children can be added
  const action_tracker =  mainFolder.createFolder("[SEO] - Action Tracker [" + clientNamefolder + "]")
  const audit =  mainFolder.createFolder("[SEO] - Audits [" + clientNamefolder + "]")
  

  // Creating children
  content.createFolder("[" + clientName +  "] Content Approved")
  content.createFolder("[" + clientName +  "] Content Draft")


  // Getting the documents
  const action_tracker_sheet = DriveApp.getFileById('Sheet_id')
  const analytics_audit = DriveApp.getFileById('Sheet_id')


  // Moving the documents to the respective folders
  const moved_action_tracker_sheet = action_tracker_sheet.moveTo(action_tracker)
  const moved_analytics_audit = analytics_audit.moveTo(audit)
 
  // renamin sheets
  moved_action_tracker_sheet.SpreadsheetApp.getActiveSpreadsheet().rename(clientName + " Action Tracker");
  moved_analytics_audit.SpreadsheetApp.getActiveSpreadsheet().rename(clientName + " Analytics Audit");


 } else {
   Logger.log('No Client Name Specified')
 }
}

最終觸發此 function 以添加文件夾、子文件夾和工作表。

function test(){
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var databaseSheet = ss.getSheetByName("Clients");
 var lastAvailableRow = databaseSheet.getLastRow();
 const clientName = databaseSheet.getRange(lastAvailableRow, 2).getValue();
 createClientAccountFolder(clientName, "[SHEET_ID]", "[DOC_ID]")
}

主要問題及解決方案:

  • 如果只想顯示鏈接,不需要添加公式,直接通過Range.setValue(folderUrl)設置值即可。
  • 如果您希望顯示的文本與鏈接本身不同,請使用DrDaNkk 的答案中采用的方法,通過RichTextValue
  • 您只想設置單個單元格的值(最后一行的 K 列)。 因此,您的范圍不應包含多個單元格,如您當前的代碼 ( "K2:K" + lastAvailableRow ),而是一個,如"K" + lastRow
  • 要使用具有編輯權限的 email 地址共享文件夾,請使用Folder.addEditor(emailAddress)

代碼示例:

function addLinkAndShare() {
  const customerRoot = DriveApp.getFolderById('folder_id');
  const ss = SpreadsheetApp.getActiveSpreadsheet();
  const databaseSheet = ss.getSheetByName("Clients");
  const lastRow = databaseSheet.getLastRow();
  const clientName = databaseSheet.getRange(lastRow, 2).getValue();
  if (clientName) {
    const mainFolder = customerRoot.createFolder(clientNameFolder);
    const folderUrl = mainFolder.getUrl();
    databaseSheet.getRange("K" + lastRow).setValue(folderUrl);
    const clientEmail = databaseSheet.getRange("J" + lastRow).getValue();
    mainFolder.addEditor(clientEmail);
    /*
    / Creating subfolders, renaming, etc. (unrelated to your question)
    */
  } else {
    Logger.log('No Client Name Specified')
  } 
}

其他問題和改進:

我建議您創建文件夾,添加文件夾 URL 並在將數據附加到工作表的同一腳本上共享它,就在這樣做之前。 這樣,您可以一次添加所有值,而無需檢索剛剛設置的值(例如clientName ),並且您將減少必要的調用量(請參閱最小化對其他服務的調用)。

但是,由於您沒有提供與附加到工作表的數據相關的代碼,因此我沒有將其添加到上面的代碼示例中。

我希望您意識到您正在嘗試將相同的文件夾鏈接添加到工作表中的多個單元格。 我不知道這是否是有目的的,但我認為您可能想要更改該范圍。 無論如何,我建議的解決方案使用RichTextValue object,因此您不必使用公式。 你會想要改變

clients_sheet.setFormula('=HYPERLINK("' + mainFolder.getUrl() + '")');

var richText = SpreadsheetApp.newRichTextValue().setText("Folder URL").setLinkUrl(folder_url).build();
clients_sheet.setRichTextValue(richText);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM