如何在Google表格中将整个表格指定为范围?


27

到目前为止,我发现最好的解决方法是:

worksheet_name!$A$1:$YY

但理想情况下,我希望能够简单地编写,例如:

worksheet_name!

那么,有谁知道:是否有一种语法用于将整个工作表指定为范围?

Answers:


10

我已经创建了一个小的Google Apps脚本(GAS)代码段,可以为您完成这项工作。

function sheetRange(targetName,int) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var asName = ss.getActiveSheet().getSheetName();
  var tgSheet = ss.getSheetByName(targetName);
  var output;

  if(targetName == asName) {
    output = "Error: target sheet is active sheet !!";
  } else {
    switch(int) {
      case 1: 
        output = tgSheet.getDataRange().getValues();
        break;
      case 2:
        output = tgSheet.getSheetValues(1, 1, tgSheet.getMaxRows(),  
          tgSheet.getMaxColumns());
        break;
      default:
        output = "Choose int to be 1 or 2 !!";
    }
  }
  return output;
}

在电子表格菜单中,选择工具>脚本编辑器,然后添加代码。确保按下错误按钮:
在此处输入图片说明

用法

=sheetRange("sheetName",int)

使用int备注中说明的选项。

我为您创建了一个示例文件:工作表为范围

备注

在这种情况下,有两种方法可以通过GAS确定电子表格中的范围:

  1. int=1; 通过该getDataRange方法。这将检索一个范围,其中最后一列是其中包含数据的列。相同占行数。这通常是最直接的途径。请参阅示例文件中的第二页。
  2. int=2; 通过该getSheetValues方法。这将检索“所见即所得”范围。请参阅示例文件中的第三页。
  3. 这些类型的自定义功能的刷新率不是即时的,因此请耐心等待。刷新数据可能需要几个小时。

参考文献


为什么此功能需要几个小时才能显示刷新的数据?我认为使用这样的功能的重点是始终保持准确的范围?
ClearCloud8

1
使用getSheetValues()的解决方案比使用getDataRange()和getValues()的解决方案快20%。用包含38k单元的工作表测试。
Mark Witczak

11

您可以使用A:Z或A:AB或A:XX(其中XX是页面的最后一列):

屏幕快照:使用此命令基于单个单元格的值将条件格式应用于行


1
Ist去世:“登克·玛尔诺(Denk Mal Neu)”?这如何回答这个问题?
Jacob Jan Tuinstra

1
这里的每个人都知道如何指定范围。这不是问题。

3

Google表格没有整个表格范围的范围语法。

下面的公式将返回名为Sheet1的整个工作表的范围地址

="Sheet1!"&ADDRESS(1,1,,TRUE)&":"&ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE)

为了将其用作参考,请将其放在INDIRECT内。下面的公式将返回Sheet1中所有值的数组。

= ArrayFormula(
  间接(
    “ Sheet1!”
    &ADDRESS(1,1,,TRUE)
    &“:”
    &ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),, TRUE)
    ,
    真正
  )
)

1

我不知道具体的公式,但是如果您不知道行数/列数,可以使用一些公式:

indirect("Sheet!1:"&countif(Sheet!A:A,"<>@")+countif(Sheet!A:A,"=@"))

在这里,Sheet是您的工作表名称,并且@是任意字符串。如果您选择的工作表@在一个单元格中,它将无法正常工作。如果工作表中包含这样的单元格,则可以用其他字符替换它。

COUNITF这里计算的行的A列中的数量:一个不含有@,这应该是所有如果有包含它没有细胞,和INDIRECT变换Sheet!1:###(其中,###是行数)为实际的选择的范围。


我很感谢您所做的努力,但据我所知,您的建议与我在问题中提到的解决方法相比没有任何好处,但缺点是过于冗长,并且要求用户输入一个永远不会出现的字符在工作表中。
2013年

@sampablokuper关于它很冗长,我认为我无法找到解决方案,至于第二部分,我忽略了我现在添加到答案中的内容。而且,据我所知,与当前的解决方法相比,它的优势在于您无需知道工作表有多少行或多少列。但是,是的,这是可能的:(也许一个人可以用VBA脚本组成一个函数
Jerry

谢谢,但是我当前的解决方法不需要一个人知道工作表有多少行,只要它的<676列就不需要多少列。
sampablokuper

1

已经为使用appscript进行操作的人员提供了最佳答案,但是如果在那里有人在使用Google Sheets进行适当的操作,那么以下方法可能会满足您的需求:

"worksheet_name!1:" & ROWS(worksheet_name!A:A)

说明:*您实际上是通过与worksheet_name中的行数连接的字符串指定范围的

这种方法的一些优点:*这是“动态的” ...如果在底部添加行,则范围将相应地进行调整*轻巧-您可以将其拍入importrange / query函数

缺点:*尚未在所有情况下都尝试过,因此可能仅适用于特定用例*我个人比较喜欢使事物动态/干净,因此自定义功能应是介于appscript和这种轻量级方法之间的良好中间地带


1

这对我有用:

var ss = SpreadsheetApp.getActive();
var sh = ss.getSheets()[0];
var rg = sh.getName() +"!"+ sh.getDataRange().getA1Notation();

在绑定脚本中使用,将工作表名称与“!”组合 然后在所选工作表上获得数据范围的A1表示法


0

我可以通过将范围命名为不带感叹号的表来选择整个表。

我有一个名为data的标签。而不是使用数据!或数据!A1:ZZ。


当我们为命名范围分配名称时,应指定范围引用。您使用什么参考范围?
鲁本

-1

要将整个工作表指定为范围,请使用:

worksheet_name!A1:ZZ

您可以在这里尝试:https : //developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

或使用Java(清除Sheet1中的所有内容):

Sheets service = getSheetsService(credential);
service.spreadsheets().values().clear(REPORT_WARNINGS_LATAM_FILEID, "Sheet1!A1:ZZ", new ClearValuesRequest()).execute();

或者,如果您只想在另一张工作表(例如:Sheet2)的公式(例如:SUM)中使用它,则可以使用以下参考:

=SUM(Sheet1!A1:ZZ)

^这将汇总Sheet1上所有现有的单元格并将值放在Sheet2上的单元格中,您可以在此处找到示例:https ://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQFHklbohL1NM/edit?usp =sharing。在此示例中,Sheet1上有3列和5行,因此此公式= SUM(Sheet1!A1:ZZ)选择所有它们。您可以在Sheet1上添加行或列,此解决方案仍将选择所有单元格。

PS:如果您不赞成我的回答,请解释原因。


-2

假设您知道行数,则可以将整个工作表命名为“ worksheet_name”:

脚步:

  1. 选择整个工作表
  2. 点击“数据”->“命名和保护范围”
  3. 输入“ worksheet_name”以命名选择并单击“完成”。

现在,每次在函数中使用“ worksheet_name”时,它将引用整个工作表。


4
您的方法将导致“快照”范围。添加列或行都不会更改命名范围!
2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.