Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.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

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 谷歌工作表:将文件夹范围导入主工作表_Google Apps Script_Google Sheets_Import_Google Sheets Api - Fatal编程技术网

Google apps script 谷歌工作表:将文件夹范围导入主工作表

Google apps script 谷歌工作表:将文件夹范围导入主工作表,google-apps-script,google-sheets,import,google-sheets-api,Google Apps Script,Google Sheets,Import,Google Sheets Api,我希望从源文件夹中的电子表格中导入行,该文件夹将每天使用新的电子表格进行更新。是否可以将源文件夹中的每个新电子表格中的特定范围拉入主工作表 我一直在使用下面的代码来回答一个类似的问题。除了复制已导入到母版图纸中的数据外,此操作非常有效。我怎样才能解决这个问题 function getdata() { //declare multiple variables in one statement - Initial value will //be undefined var destina

我希望从源文件夹中的电子表格中导入行,该文件夹将每天使用新的电子表格进行更新。是否可以将源文件夹中的每个新电子表格中的特定范围拉入主工作表

我一直在使用下面的代码来回答一个类似的问题。除了复制已导入到母版图纸中的数据外,此操作非常有效。我怎样才能解决这个问题

function getdata() {
  //declare multiple variables in one statement - Initial value will
  //be undefined
  var destinationSpreadsheet,destinationSS_ID,destsheet,destrange,file,files,
      sourcerange,sourceSS,sourcesheet,srcSheetName,sourcevalues;

  srcSheetName = "Type the Name of Source Sheet Tab Here";
  destinationSS_ID = "Type the Name of destination spreadsheet file ID Here";
  files = DriveApp.getFolderById("Folder ID").getFiles();
  destinationSpreadsheet = SpreadsheetApp.openById(destinationSS_ID);
  destsheet = destinationSpreadsheet.getSheetByName('Sheet1');  

  while (files.hasNext()) {
    file = files.next();
    if (file.getMimeType() !== "application/vnd.google-apps.spreadsheet") {
      continue;
    };
    sourceSS = SpreadsheetApp.openById(file.getId());
    sourcesheet = sourceSS.getSheetByName(srcSheetName);
    //sourcesheet.getRange(start row, start column, numRows, number of Columns)
    sourcerange = sourcesheet.getRange(2,1,sourcesheet.getLastRow()-1,6);
    sourcevalues = sourcerange.getValues();

    //Write all the new data to the end of this data
    destrange = destinationSpreadsheet.getSheetByName("Sheet1")
        .getRange(destsheet.getLastRow()+1,1,sourcevalues.length,sourcevalues[0].length);

    destrange.setValues(sourcevalues);         
  };
};
  • 您希望将“数据文件-测试#”电子表格的“Sheet1”的值放入“主”电子表格的“Sheet1”中
  • 当“MASTER”中存在“Data File-TEST”的值时,您不希望放置“Data File-TEST”的值
如果我的理解是正确的,这次修改怎么样?修改脚本的流程如下所示。请把这看作是几个答案中的一个

  • 从“主”电子表格的“表1”中检索值
  • 从“数据文件-测试”电子表格的“Sheet1”中检索值
  • 比较两个值。如果两张表中的行值不相同,则将值从“数据文件-测试”放入“主”
  • 修改脚本: 函数getdata(){ var masterSpreadsheetId=“####”;//主电子表格的电子表格ID。 var folderId=“####”;//包含“数据文件”文件的文件夹ID。 var dataFileSheetName=“Sheet1”; var files=DriveApp.getFolderById(folderId.getFiles(); var masterSpreadsheet=SpreadsheetApp.openById(masterSpreadsheetId); var destSheet=masterSpreadsheet.getSheetByName('Sheet1'); var destSheetValues=destSheet.getRange(2,1,destSheet.getLastRow()-1,6).getValues(); var值=[]; while(files.hasNext()){ var file=files.next(); 如果(file.getMimeType()!==“application/vnd.google apps.spreadsheet”)继续; var datafiles=SpreadsheetApp.openById(file.getId()); var dataFileSheet=datafiles.getSheetByName(dataFileSheetName); var dataFileValues=dataFileSheet.getRange(2,1,dataFileSheet.getLastRow()-1,6).getValues(); Array.prototype.push.apply(值、数据文件值); }; var res=值。过滤器(函数(e){ return!destSheetValues.some(函数(f){ 返回e.every(函数(g,k){ var-temp=f[k]; if(k<2){ g=新日期(g).getTime(); temp=新日期(temp.getTime(); } 返回g==温度; }); }); }); 如果(res.length>0)destSheet.getRange(destSheet.getLastRow()+1,1,res.length,res[0].length).setValues(res); } 注:
    • 在这个示例脚本中,使用了共享的示例电子表格“MASTER”、“Data File-TESTA”、“Data File-TESTB”和“Data File-TESTC”。因此,如果您的实际情况使用不同的电子表格文件名和工作表名,请修改它们
    参考资料:
        • 您希望将“数据文件-测试#”电子表格的“Sheet1”的值放入“主”电子表格的“Sheet1”中
        • 当“MASTER”中存在“Data File-TEST”的值时,您不希望放置“Data File-TEST”的值
        如果我的理解是正确的,这次修改怎么样?修改脚本的流程如下所示。请把这看作是几个答案中的一个

      • 从“主”电子表格的“表1”中检索值
      • 从“数据文件-测试”电子表格的“Sheet1”中检索值
      • 比较两个值。如果两张表中的行值不相同,则将值从“数据文件-测试”放入“主”
      • 修改脚本: 函数getdata(){ var masterSpreadsheetId=“####”;//主电子表格的电子表格ID。 var folderId=“####”;//包含“数据文件”文件的文件夹ID。 var dataFileSheetName=“Sheet1”; var files=DriveApp.getFolderById(folderId.getFiles(); var masterSpreadsheet=SpreadsheetApp.openById(masterSpreadsheetId); var destSheet=masterSpreadsheet.getSheetByName('Sheet1'); var destSheetValues=destSheet.getRange(2,1,destSheet.getLastRow()-1,6).getValues(); var值=[]; while(files.hasNext()){ var file=files.next(); 如果(file.getMimeType()!==“application/vnd.google apps.spreadsheet”)继续; var datafiles=SpreadsheetApp.openById(file.getId()); var dataFileSheet=datafiles.getSheetByName(dataFileSheetName); var dataFileValues=dataFileSheet.getRange(2,1,dataFileSheet.getLastRow()-1,6).getValues(); Array.prototype.push.apply(值、数据文件值); }; var res=值。过滤器(函数(e){ return!destSheetValues.some(函数(f){ 返回e.every(函数(g,k){ var-temp=f[k]; if(k<2){ g=新日期(g).getTime(); temp=新日期(temp.getTime(); } 返回g==温度; }); }); }); 如果(res.length>0)destSheet.getRange(destSheet.getLastRow()+1,1,res.length,res[0].length).setValues(res); } 注:
        • 在这个示例脚本中,使用了共享的示例电子表格“MASTER”、“Data File-TESTA”、“Data File-TESTB”和“Data File-TESTC”。因此,如果您的实际情况使用不同的电子表格文件名和工作表名,请修改它们
        参考资料:

        为了正确理解您的问题,您能提供所需的输入和输出示例吗?我创建了一个示例,其中母版图纸从“数据文件”文件夹中的谷歌图纸导入数据。主图纸和数据文件图纸具有相同的列标题和图纸名称。在本例中,我已经运行了上述脚本三次。它可以工作,但是,我希望它避免导入已经导入的数据。感谢您回复并提供电子表格样本。从他们那里,我提出了一个修改后的脚本。你能确认一下吗?如果我误解了你的问题
        function getdata() {
          var masterSpreadsheetId = "###"; // Spreadsheet ID of "MASTER" spreadsheet.
          var folderId = "###"; // Folder ID including "Data File" files.
          var dataFileSheetName = "Sheet1";
        
          var files = DriveApp.getFolderById(folderId).getFiles();
          var masterSpreadsheet = SpreadsheetApp.openById(masterSpreadsheetId);
          var destSheet = masterSpreadsheet.getSheetByName('Sheet1');
          var destSheetValues = destSheet.getRange(2, 1, destSheet.getLastRow() - 1, 6).getValues();
          var values = [];
          while (files.hasNext()) {
            var file = files.next();
            if (file.getMimeType() !== "application/vnd.google-apps.spreadsheet") continue;
            var dataFileSS = SpreadsheetApp.openById(file.getId());
            var dataFileSheet = dataFileSS.getSheetByName(dataFileSheetName);
            var dataFileValues = dataFileSheet.getRange(2, 1, dataFileSheet.getLastRow()-1, 6).getValues();
            Array.prototype.push.apply(values, dataFileValues);
          };
          var res = values.filter(function(e) {
            return !destSheetValues.some(function(f) {
              return e.every(function(g, k) {
                var temp = f[k];
                if (k < 2) {
                  g = new Date(g).getTime();
                  temp = new Date(temp).getTime();
                }
                return g == temp;
              });
            });
          });
          if (res.length > 0) destSheet.getRange(destSheet.getLastRow()+1,1,res.length,res[0].length).setValues(res);
        }