那么,有谁知道:是否有语法将整个工作表指定为范围?
#1 楼
我创建了一个小的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;
}
在电子表格中菜单,选择工具>脚本编辑器,然后添加代码。确保按下bug按钮:
用法
=sheetRange("sheetName",int)
使用
int
选项,如下面的注释所述。 />示例我为您创建了一个示例文件:工作表为范围
备注
在这种情况下,有两种方法可以通过GAS确定电子表格中的范围:
int=1
;通过getDataRange
方法。这将检索一个范围,其中最后一列是其中包含数据的列。相同占行数。这通常是最直接的途径。请参见示例文件中的第二页。int=2
;通过getSheetValues
方法。这将检索“所见即所得”范围。请参阅示例文件中的第三页。这些类型的自定义函数的刷新率不是即时的,因此请耐心等待。刷新数据可能需要几个小时。
参考文献
getDataRange
getSheetValues
#2 楼
您可以使用A:Z或A:AB或A:XX(其中XX是页面的最后一列):评论
Ist去世:“登克·玛尔诺(Denk Mal Neu)”?这如何回答这个问题?
–雅各布·扬·图恩斯特拉(Jacob Jan Tuinstra)
2015年9月18日上午10:10
我喜欢这个答案,所有行!
– datdinhquoc
20年1月24日在22:50
请求比可用单元更多的单元似乎可以正常工作-至少对于我尝试做的事情(使用importrange)。换句话说,只要您请求的列多于所需的列,就可以得到所有内容。不知道这是否对其他函数来说是问题....我想用类似Maksym的答案,例如worksheet_name!A1:ZZZ,它通常应覆盖所有列(尽管在某些情况下可能需要更多的Z ?)
–珍宝
20 Jun 18'在1:54
#3 楼
Google表格没有用于整个表格范围的范围语法。以下公式将返回名为Sheet1的整个表格的范围地址。
="Sheet1!"&ADDRESS(1,1,,TRUE)&":"&ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE)
为了将其用作参考,请将其放在INDIRECT内。以下公式将返回Sheet1中所有值的数组。
=ArrayFormula( INDIRECT( "Sheet1!" &ADDRESS(1,1,,TRUE) &":" &ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE) , TRUE ) )
#4 楼
我不知道具体的数字,但是如果您不知道行数/列数,我想您可以使用一些公式:indirect("Sheet!1:"&countif(Sheet!A:A,"<>@")+countif(Sheet!A:A,"=@"))
是工作表名称,而Sheet
是任意字符串。如果您选择的那张纸在一个单元格中有@
,它将无法正常工作。如果工作表中包含这样的单元格,则可以用另一个字符替换它。包含它,然后@
将COUNITF
(其中@
是行数)转换为实际选定范围。评论
我很感谢您所做的努力,但是据我所知,您的建议与我在问题中提到的解决方法相比没有任何优势,但缺点是过于冗长且要求用户输入一个永远不会出现的字符在工作表中。
–user6757
13年5月28日在16:10
@sampablokuper关于它的详细信息,我认为我无法找到解决方案,至于第二部分,我忽略了我现在添加到答案中的内容。而且,据我所知,与当前的解决方法相比,它的优点是您不需要知道工作表有多少行或多少列。但是,是的,这是可以做到的:(也许一个人可以用VBA脚本组成一个函数。
–杰里
13年5月28日在16:54
谢谢,但是我当前的解决方法不需要一个人知道工作表有多少行,只要它的<676列就不需要多少列。
–user6757
13年5月29日在19:56
#5 楼
假设知道行数,则可以将整个工作表命名为“ worksheet_name”:STEPS:
选择整个工作表
单击'数据'->'命名和保护范围'
键入“ worksheet_name”以命名选择并单击“完成”。
现在每次在函数中使用“ worksheet_name”时,它将引用整个工作表。
评论
您的方法将导致“快照”范围。同时添加列或行将不会更改命名范围!
–雅各布·扬·图恩斯特拉(Jacob Jan Tuinstra)
13年8月12日在20:44
#6 楼
要指定整个工作表的范围,请使用: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)中使用它,可以使用以下参考:将Sheet1上所有现有的单元格相加并将值放在Sheet2上的单元格中,可以在此处找到示例:https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing。在此示例中,Sheet1上有3列和5行,因此此公式= SUM(Sheet1!A1:ZZ)选择所有它们。您可以在Sheet1上添加行或列,并且此解决方案仍会选择所有单元格。
附言:如果您不赞成我的回答,请解释原因。
#7 楼
对于使用appscript进行操作的人员,已经给出了最佳答案,但是,如果在那里有人在Google Sheets中正常工作,那么以下方法可能会满足您的需求:"worksheet_name!1:" & ROWS(worksheet_name!A:A)
说明:
*本质上,您是通过与工作表名中的行数串联的字符串指定范围的!这是“动态的” ...如果在底部添加行,则范围会相应地调整
*轻量级-您可以将其拍入importrange / query函数
缺点:
*并非在所有情况下都尝试过,因此可能仅在特定的用例下有效轻巧的方法
#8 楼
这对我有用:var ss = SpreadsheetApp.getActive();
var sh = ss.getSheets()[0];
var rg = sh.getName() +"!"+ sh.getDataRange().getA1Notation();
在绑定脚本中使用,将工作表名称与“!”组合在一起然后在所选工作表上获得数据范围的A1表示法
#9 楼
我可以通过将范围命名为没有感叹号的表来选择整个表。我有一个名为data的标签。而不是使用数据!或数据!A1:ZZ。
评论
当我们为命名范围分配名称时,应指定范围引用。您使用什么参考范围?
–鲁本♦
18年1月4日,下午3:31
评论
为什么此功能需要几个小时才能显示刷新的数据?我认为使用这样的功能的全部目的是始终保持准确的范围?
– ClearCloud8
19年1月17日在20:08
使用getSheetValues()的解决方案比使用getDataRange()和getValues()的解决方案快20%。用包含38k单元的工作表测试。
– Mark Witczak
19年3月20日在15:23