Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script 按名称而不是ID获取Google电子表格_Google Apps Script_Google Sheets_Google Drive Api - Fatal编程技术网

Google apps script 按名称而不是ID获取Google电子表格

Google apps script 按名称而不是ID获取Google电子表格,google-apps-script,google-sheets,google-drive-api,Google Apps Script,Google Sheets,Google Drive Api,我正在尝试从另一个电子表格导入数据,发现下面的工作代码。如何按名称而不是ID检索文件 (文件ID每月更改一次,但文件名将保持不变。) 函数导入(){ var values=SpreadsheetApp.openById('xxxxxx')。 getSheetByName('xxx').getRange('A1:D100').getValues(); SpreadsheetApp.getActiveSheet() .getRange(1,1,values.length,values[0].leng

我正在尝试从另一个电子表格导入数据,发现下面的工作代码。如何按名称而不是ID检索文件

(文件ID每月更改一次,但文件名将保持不变。)

函数导入(){
var values=SpreadsheetApp.openById('xxxxxx')。
getSheetByName('xxx').getRange('A1:D100').getValues();
SpreadsheetApp.getActiveSheet()
.getRange(1,1,values.length,values[0].length)
.setValues(值);
}

您可以使用DriveApp对电子表格进行迭代,获取所有表格,然后按名称进行比较:

/* 
The function will iterate through spreadsheets in a given folder and return DriveApp file object (https://developers.google.com/apps-script/reference/drive/file)
folderId — string — the id of the folder to search for the target spreadsheet; root folder will be used if nothing is passed
targetSpreadsheetName - string - the name of the spreadsheet to be found
*/
function getSpreadsheet(folderId, targetSpreadsheetName) {
  var folder = folderId ? DriveApp.getFolderById(folderId) : DriveApp.getRootFolder();
  var spreadsheets = folder.getFilesByType(MimeType.GOOGLE_SHEETS);
  while (spreadsheets.hasNext()) {
    var spreadsheet = spreadsheets.next();
    if (spreadsheet.getName() === targetSpreadsheetName) {
      return spreadsheet.getId();
    }
  }
  return null;
}
然后在
导入功能中,您可以这样使用它:

function ImportRange() {
var id = getSpreadsheet('', 'Untitled spreadsheet'); //this way you'd get a spreadsheet named 'Untitled spreadsheet' in your root folder
if (id === null) return 'No spreadsheet';
var values = SpreadsheetApp.openById(id). 
  getSheetByName('xxx').getRange('A1:D100').getValues();
 SpreadsheetApp.getActiveSheet()
                .getRange( 1, 1, values.length, values[0].length )
                .setValues(values);

}

不过,这个函数似乎相当慢(在我的例子中,脚本在1个电子表格上迭代大约需要1秒钟),我不建议每次运行
Import range
时都运行它。如果您的目标电子表格的id每个月都会发生变化,那么将其存储在某个地方(在技术电子表格中或从那里获取)会更合理。因此,您每月只需要运行一次带有.

getSpreadsheet
,最好的方法可能是每次创建电子表格时,都在某处记下它的ID。不能保证文件名是唯一的。