亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過名稱獲取電子表格網址并粘貼到另一個電子表格中的代碼

通過名稱獲取電子表格網址并粘貼到另一個電子表格中的代碼

一只斗牛犬 2021-04-27 13:15:32
因此,我有一個包含2列的工作表,A列是電子表格的名稱,B列是URL。因此,我正在使用腳本通過名稱來獲取url,但最后一行不起作用。誰能幫我?function spreadsheetUrl() {  var ss = SpreadsheetApp.getActiveSpreadsheet();  ss.setActiveSheet(ss.getSheetByName('Page1'));  var lastRow = ss.getRange("B2:B200").getLastRow();  var newRow = lastRow+1;  var range = SpreadsheetApp.getActiveSheet().getRange(newRow, 1);  var spreadsheetName = range.getValue();  var files = DriveApp.getFilesByName(spreadsheetName);  while (files.hasNext()){     var file = files.next();     var url = file.getUrl();     return url     }  getValue(url).Paste_Values(getRange(newRow, 2), {contentsOnly: true});}
查看完整描述

2 回答

?
慕沐林林

TA貢獻2016條經驗 獲得超9個贊

獲取電子表格URL

您的代碼將面臨的問題之一是,隨著添加更多的url,newrow不會改變,實際上,您實際上希望文件名旁邊的url不在列表的末尾。此函數將vA1 [i] [0]中的文件名放入urls列,即vA2 [i] [0],它還會計算每個名稱的文件數并記錄信息并在對話框中顯示在功能的末尾,從而使您有機會確保獲得正確的文件。如果您習慣于存儲文件備份,則會發生這種情況。


還可以考慮將對話框放入循環中,從而讓您選擇要保存的對話框,但這需要您在函數運行時進行觀察。


function spreadsheetUrl() {

  var ss=SpreadsheetApp.getActive();

  var sh=ss.getSheetByName('Page1');

  var rg1=sh.getRange(2,1,sh.getLastRow(),1);

  var rg2=sh.getRange(2,2,sh.getLastRow(),1);

  var vA1=rg1.getValues();//Spreadsheet Names

  var vA2=rg2.getValues();//Urls

  var xf=[];

  for(var i=0;i<vA1.length;i++) {

    if(vA1[i][0]) {

      var files=DriveApp.getFilesByName(vA1[i][0]);

      var n=0;

      while (files.hasNext()){

        var file = files.next();

        if(n==0) {

          vA2[i][0]=file.getUrl();

        }else{

          xf.push({name:file.getName(),url:file.getUrl(),id:file.getId()});

        }

        n++;

      }

    }

  }

  rg2.setValues(vA2);

  var html='<h1>You have additional files with the same names</h1>';

  if(xf.length) {

    for(var i=0;i<xf.length;i++) {

      html+=Utilities.formatString('<br />Name: %s Url: %s Id: %s',xf[i].name, xf[i].url,xf[i].id);

    }

    html+='<br /><input type="button" value="Exit" onClick="google.script.host.close();" />';

    var userInterface=HtmlService.createHtmlOutput(html).setWidth(1000);

    SpreadsheetApp.getUi().showModelessDialog(userInterface, "Files with Identical Names")

  }

}

通過Dailog進行更改

我對此進行了一些嘗試,當有多個給定名稱的文件時,該版本允許您修改發布的網址。它是在循環的最后而不是在循環的中間進行的,因此您不必在循環運行時執行多次。此版本還具有用于將更改寫入工作表服務器端的附帶功能。


function spreadsheetUrl() {

  var ss=SpreadsheetApp.getActive();

  var sh=ss.getSheetByName('Page1');

  var rg1=sh.getRange(2,1,sh.getLastRow(),1);

  var rg2=sh.getRange(2,2,sh.getLastRow(),1);

  var vA1=rg1.getValues();//Spreadsheet Names

  var vA2=rg2.getValues();//Urls

  //rg2.clearContent();//debug

  var xf=[];

  for(var i=0;i<vA1.length;i++) {

    if(vA1[i][0]) {

      var files=DriveApp.getFilesByName(vA1[i][0]);

      var n=0;

      while (files.hasNext()){

        var file = files.next();

        if(n==0) {

          vA2[i][0]=file.getUrl();

        }else{

          xf.push({name:file.getName(),url:file.getUrl(),id:file.getId(),row:i+2});

        }

        n++;

      }

    }

  }

  rg2.setValues(vA2);

  var html='<h1>You have additional files with the same names</h1>';

  html+='<br />Change them if you wish by select the select Me button for the appropriate selection.';

  html+='<br />Press close when you done.';

  if(xf.length) {

    for(var i=0;i<xf.length;i++) {

      html+=Utilities.formatString('<br />Name: %s Id: %s<input type="button" value="Select Me" onClick="selectMe(\'%s\',%s);" />',xf[i].name,xf[i].id,xf[i].url,xf[i].row);

    }

    html+='<br /><input type="button" value="Exit" onClick="google.script.host.close();" />';

    html+='<script>function selectMe(value,row){console.log(value);console.log(row);google.script.run.selectMe("Page1",value,row);}console.log("My Code");</script>';

    var userInterface=HtmlService.createHtmlOutput(html).setWidth(400).setHeight(300);

    SpreadsheetApp.getUi().showModelessDialog(userInterface, "Files with Identical Names")

  }

}


function selectMe(sheetname,value,row) {

  var ss=SpreadsheetApp.getActive();

  var sh=ss.getSheetByName(sheetname);

  var rg=sh.getRange(row,2).setValue(value);

}


查看完整回答
反對 回復 2021-05-13
  • 2 回答
  • 0 關注
  • 193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號