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 sheets 数组\u约束或查询使工作表变慢_Google Sheets_Google Sheets Formula - Fatal编程技术网

Google sheets 数组\u约束或查询使工作表变慢

Google sheets 数组\u约束或查询使工作表变慢,google-sheets,google-sheets-formula,Google Sheets,Google Sheets Formula,我有一个非常简单、快速的工作表,运行速度非常慢(在某些计算机上崩溃)。问题似乎出现在Q和A的工作表上,它确实有2000行(必要),但这不应该像现在这样减慢速度。我使用此公式创建一个值数组,以帮助填充相关下拉列表: =ARRAYFORMULA(if(a2:a2000="",,ARRAY_CONSTRAIN(TRIM(SPLIT(TRIM(TRANSPOSE(QUERY(IF(TRANSPOSE(C2:C2000)=List!C2:C200,List!D2:D200&&q

我有一个非常简单、快速的工作表,运行速度非常慢(在某些计算机上崩溃)。问题似乎出现在Q和A的工作表上,它确实有2000行(必要),但这不应该像现在这样减慢速度。我使用此公式创建一个值数组,以帮助填充相关下拉列表:

=ARRAYFORMULA(if(a2:a2000="",,ARRAY_CONSTRAIN(TRIM(SPLIT(TRIM(TRANSPOSE(QUERY(IF(TRANSPOSE(C2:C2000)=List!C2:C200,List!D2:D200&"---",),,10))),"---")),COUNTA(C2:C2000),10)))
我从一个论坛上得到了这个公式,因为它使用了一种我不熟悉的技术,所以我相信这是造成问题的原因。我需要的是,根据第一个下拉列表中当前选定的项目,用正确的选项填充右侧的帮助器单元格。这个公式很有效(比我以前复制了2000行的过滤公式要好得多),但似乎有什么地方出了问题,导致工作表运行和加载极其缓慢。我现在不知道还需要做些什么来加速这个过程,因为这个公式和之前的过滤函数都没有做到这一点

您可以在此处看到该表:

如果加载了工作表,您可以通过更改任何下拉选择来查看速度问题,因为更新查询结果至少需要10-20秒

如果您无法加载它,下面是一个屏幕截图,其中包含公式和可能的问题:

我一直在尝试聊天中的想法,但没有成功。最大的问题是下拉列表基于下拉列表填充,因此存在循环依赖。我需要的是快速填充Q&A列D值的列表,其中Q&A列C中的值与Q&A列C中的相对单元格中的值相匹配。我使用列表选项卡生成较小的列表,但它们仍然依赖于Q&A列

更新: 虽然我在这里得到了很多帮助和想法,但似乎真的没有我想要的好办法。因此,我决定采用脚本解决方案。如果您发现这个问题是因为您有一个类似的问题,下面是我用来填充帮助器单元格以及下拉菜单的代码

function onEdit(e) {
  var ss=SpreadsheetApp.getActiveSpreadsheet();
  var activeCell = ss.getActiveCell();
  var listSheet = ss.getSheetByName("List");
  var lastRow = listSheet.getLastRow();
  var cats = listSheet.getRange(2,3,lastRow,11).getDisplayValues();
  var catsLength = cats.length-1;
  var sheetName = ss.getActiveSheet().getName();
  var sheet = ss.getActiveSheet();
  var row = activeCell.getRow();
  var cat = sheet.getRange(row,3,1,4).getDisplayValues();
  var catVals = [];
  var subCat1Vals = [];
  var subCat2Vals = [];
  if(sheetName=='Q\'s and A\'s'){
    sheet.getRange(row,7,1,30).clearContent();

      for (i=0; i<=catsLength; i++){
        if (cat[0][0] == cats[i][0] && cats[i][1] != ""){
          catVals = catVals.concat(cats[i][1]);
        }
        if (cat[0][0] == cats[i][8] && cat[0][1] == cats[i][9] && cats[i][10] != ""){
          subCat1Vals = subCat1Vals.concat(cats[i][10]);
        }
        if (cat[0][0] == cats[i][3] && cat[0][1] == cats[i][4] && cat[0][2] == cats[i][5] && cats[i][6] != ""){
          subCat2Vals = subCat2Vals.concat(cats[i][6]);
        }
      }
      var cols = catVals.length;
      sheet.getRange(row,7,1,cols).setValues([catVals]); 
      var cols = subCat1Vals.length;
      sheet.getRange(row,17,1,cols).setValues([subCat1Vals]);
      var cols = subCat2Vals.length;
      sheet.getRange(row,27,1,cols).setValues([subCat2Vals]); 
  }
}
函数onEdit(e){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var activeCell=ss.getActiveCell();
var listSheet=ss.getSheetByName(“列表”);
var lastRow=listSheet.getLastRow();
var cats=listSheet.getRange(2,3,lastRow,11).getDisplayValues();
var catsLength=cats.length-1;
var sheetName=ss.getActiveSheet().getName();
var sheet=ss.getActiveSheet();
var row=activeCell.getRow();
var cat=sheet.getRange(第3,1,4行).getDisplayValues();
var-catVals=[];
var subCat1Vals=[];
var SUBAT2VAL=[];
如果(sheetName=='Q's和A's'){
sheet.getRange(第7,1,30行).clearContent();

对于(i=0;我自己都打不开这张表,你有没有一个例子/屏幕截图,说明你想要的结果应该是什么?不管怎样,我想这可能是因为你在你的表中使用了
9^99
,这几乎是3,旁边有94个零。你有没有试着用9^99代替9^5或9^6考虑到同样的问题,我在三个查询中将其改为10。虽然速度仍然很慢,但现在可能会加载。我还添加了一个屏幕截图。仍然无法打开问答表。10^10是1000亿,请您将其改为4或5,以便我可以看一看。我实际上将其改为10。不是10^10。a有其他想法吗?我加载很好,只是速度很慢,但我的客户也无法加载。我现在会尝试删除大量行,这样可能就可以了。