Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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 - Fatal编程技术网

Google apps script 谷歌电子表格-查找所有隐藏行-仅包括未隐藏的行

Google apps script 谷歌电子表格-查找所有隐藏行-仅包括未隐藏的行,google-apps-script,google-sheets,Google Apps Script,Google Sheets,提供的代码将数据从表“Feuille 3”复制到另一个名为“INITIALE”的表。“源工作表”选项卡“Feuille 3”中的某些行被隐藏 当D列有一个带有“true”值的复选框时,我在“Feuille 3”中隐藏了一些行 我不知道如何检查“Feuille 3”中隐藏的行,并删除数组“NouvelleSiste”中的这些行 代码如下: function copiertableau() { var ss = SpreadsheetApp.getActiveSpreadsheet(); v

提供的代码将数据从表“Feuille 3”复制到另一个名为“INITIALE”的表。“源工作表”选项卡“Feuille 3”中的某些行被隐藏

当D列有一个带有“true”值的复选框时,我在“Feuille 3”中隐藏了一些行

我不知道如何检查“Feuille 3”中隐藏的行,并删除数组“NouvelleSiste”中的这些行

代码如下:

function copiertableau() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var orig = ss.getSheetByName("Feuille 3");
  var dest = ss.getSheetByName("INITIALE");
  var Ancienneliste = orig.getDataRange().getValues();
  var Nouvelleliste = new Array();
  for (var i = 0; i < Ancienneliste.length; i++) {
    var Nouvelleligne = new Array(); 
    for (var j = 0; j < 3; j++) {
      Nouvelleligne[j] = Ancienneliste[i][j];
    }
    Nouvelleliste[i] = Nouvelleligne;
  }
  ss.getSheetByName("INITIALE").getRange(22, 1, Nouvelleliste.length, 3).setValues(Nouvelleliste);
  SpreadsheetApp.flush();
}
函数copiertableau(){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var orig=ss.getSheetByName(“Feuille 3”);
var dest=ss.getSheetByName(“缩写”);
var Ancienneliste=orig.getDataRange().getValues();
var Nouvelleliste=新数组();
对于(变量i=0;i
高级工作表API有一种方法可以查找用户或代码隐藏的所有行。必须从代码编辑器显式启用Advanced Sheets API。从代码编辑器中选择“资源”和“高级谷歌服务”。向下滚动到“谷歌工作表API”打开按钮。然后单击指向GoogleAPI控制台的链接。在控制台中启用Google Sheets API

首先获取所有隐藏的行。在下面的示例中,这是在一个单独的函数中完成的。然后将当前行索引与数组中的值进行比较。如果存在隐藏行,则不要将该行的数据放入数组中

function copiertableau() {
  var arrOfHiddenRows,Nouvelleligne,o,sourceSheetTab,ss;

  ss = SpreadsheetApp.getActiveSpreadsheet();

  sourceSheetTab = ss.getSheetByName("Feuille 3");
  var dest = ss.getSheetByName("INITIALE");

  sourceSheetTab = ss.getSheetByName("INITIALE");

  var Ancienneliste = sourceSheet.getDataRange().getValues();
  var Nouvelleliste = [];

  o = {};//Object for arguments to pass to function to get the hidden rows

  o.L = sourceSheetTab.getLastRow();
  o.ssID = ss.getId();//Put the spreadsheet file ID into the object with key name ssID
  o.sheetId = sourceSheetTab.getSheetId();

  arrOfHiddenRows = getRowsHiddenByUsr(o);//Get a list of all hidden rows in sheet tab sourceSheet
  //Logger.log('arrOfHiddenRows: ' + arrOfHiddenRows)

  for (var i = 0; i < Ancienneliste.length; i++) {
    if (arrOfHiddenRows.indexOf(i+1) !== -1) {//This row is hidden in the sheet sourceSheet
      continue;//continue to loop without putting this rows data into the array
    }

    Nouvelleligne = [];

    for (var j = 0; j < 3; j++) {
      Nouvelleligne[j] = Ancienneliste[i][j];
    }


    Nouvelleliste[i] = Nouvelleligne;
  }

  ss.getSheetByName("INITIALE").getRange(22, 1, Nouvelleliste.length, 3).setValues(Nouvelleliste);
  SpreadsheetApp.flush();
}

function getRowsHiddenByUsr(po) {
try{
  var arrHiddenRows,data,fields,i,j,L,L_sh,rows,sheets,sheetId,spreadsheetId,thisSheet,thisShID;

  /*
    po.L - row length of the sheet tab
    po.ssID - the spreadsheet file ID of the spreadsheet
    po.sheetID - The ID of the sheet tab
  */

  L = po.L;
  spreadsheetId = po.ssID;
  sheetId = po.sheetID;

  //Logger.log(L)
  //Logger.log('sheetId: ' + sheetId)

  arrHiddenRows = [];

  fields = "sheets(data(rowMetadata(hiddenByUser)),properties/sheetId)";//Get only metadata of hidden rows by user
  sheets = Sheets.Spreadsheets.get(spreadsheetId, {fields: fields}).sheets;  
  L_sh = sheets.length;

  //Sheets.Spreadsheets.get(spreadsheetId)
  //Logger.log('sheets.length: ' + sheets.length)

  for (i = 0; i < L_sh; i++) {
    thisSheet = sheets[i];

    //Logger.log('thisSheet === undefined: ' + thisSheet === undefined)

    if (thisSheet === undefined) {
      continue;
    }

    thisShID = thisSheet.properties.sheetId;
    //Logger.log('thisShID: ' + thisShID)

    if (thisShID === sheetId) {
      //Logger.log('they are equal')

      data = thisSheet.data;
      rows = data[0].rowMetadata;

      //Logger.log('thisShID: ' + thisShID)
      //Logger.log('rows.length: ' + rows.length)

      for (j = 0; j < L; j++) {
        //Logger.log(rows[j].hiddenByUser)
        if (rows[j].hiddenByUser) arrHiddenRows.push(j+1);
      }
    }
  }

  return arrHiddenRows;
}catch(e) {
  console.log(e.message);
  console.log(e.stack);//log the stack

}
}
函数copiertableau(){
var arrOfHiddenRows、Nouvelleligne、o、sourceSheetTab、ss;
ss=电子表格应用程序。getActiveSpreadsheet();
sourceSheetTab=ss.getSheetByName(“Feuille 3”);
var dest=ss.getSheetByName(“缩写”);
sourceSheetTab=ss.getSheetByName(“缩写”);
var Ancienneliste=sourceSheet.getDataRange().getValues();
var-nouvelleste=[];
o={};//对象,用于传递给函数以获取隐藏行的参数
o、 L=sourceSheetTab.getLastRow();
o、 ssID=ss.getId();//将电子表格文件ID放入键名为ssID的对象中
o、 sheetId=sourceSheetTab.getSheetId();
arrOfHiddenRows=getRowsHiddenByUsr(o);//获取工作表选项卡sourceSheet中所有隐藏行的列表
//Logger.log('arrOfHiddenRows:'+arrOfHiddenRows)
对于(变量i=0;i
谢谢@SandyGood它似乎遗漏了什么。
首先,我改变了

var Ancienneliste=sourceSheet.getDataRange().getValues()

放入“sourceSheetTab”变量;我删除了一行,因为你放了两次“sourceSheetTab”和两个内容,所以我保留了第一行。
其次,您的函数继续复制sourcesheet表中的隐藏行。 也许我可以把我在“Feuille 3”中隐藏行的另一个代码放到这里来帮助你

//全局变量
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getSheetByName(“Feuille 3”);
函数cacherRow(){
对于(变量i=1;i<300;i++){
var nb=sheet.getRange('D'+i).getValue();
如果(nb==true){
表1.hideRows(i);
}
}
}

我在控制台中启用了googlesheets API。

谷歌应用程序脚本现在提供了一种新方法——确定某一行是否隐藏

  for (var i = 0; i < Ancienneliste.length; i++) {
    if (sheet.isRowHiddenByUser(i+1)) {
      // do something
    } 
  }
for(变量i=0;i

请注意,您需要在方法中指定行位置,并且它从1开始,而不是从0开始。

我认为当前无法使用API检查行/列是否隐藏。当前有一个打开的功能请求,用于确定行是否隐藏。很好的解决方案。我可以从你的答案中学习。非常感谢。通过以下链接,感谢您对该博客文章的贡献者:
  for (var i = 0; i < Ancienneliste.length; i++) {
    if (sheet.isRowHiddenByUser(i+1)) {
      // do something
    } 
  }