2013-09-25 74 views
0

我用这个代码的工作目前,但我想这可能是它是不是也很简单:如何从标题标签获取A1表示法中的列范围?

var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
var comCol = headers[0].indexOf('Header Label'); 

rng = sheet.getRange(1, comCol + 1); 

var colStr = rng.getA1Notation(); 
var colLtr = colStr.charAt(0); 
//Logger.log(colLtr+":"+colLtr); Should output something like "P:P" 
var range = ss.getSheets()[0].getRange(colLtr+":"+colLtr); 

我选择第一行,创造价值的一个数组,&搜索数组相当简单。我认为笨重的部分是组成一个整列的范围。在A1符号中,这看起来像“A:A”。

也许我过思考点,应该有一个lookupCol(String)功能,甚至一个getRangeOfCol(Index)功能。

+0

您的代码看起来不错,但你能举一个你期望输出的例子吗?目前,如果您的工作表在D列中具有文本'标题标签',则它将在不同的工作表中返回D:D的范围。 – Srik

+0

这段代码目前产生我想要的输出。如果“标题标签”是D列的标签,则产生的范围实际上是D:D,我只是认为这个当前代码有点复杂且不必要的复杂。 –

回答

1

尝试是这样的

var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues(); 
var comCol = headers[0].indexOf('Header Label'); 
var comLtr= String.fromCharCode(65 + comCol); 
var range = ss.getSheets()[0].getRange(comLtr +":"+colLtr); 
+1

'String.fromCharCode(65 + comCol);'只适用于前26列(A ... Z),不适用于后续的列(AA..ZZ) – farialima

0

要允许列AA和超越,并假设该标题标签是在第1行,我改变了定义colLtr到行:

var colLtr = colStr.substr(0, colStr.indexOf('1'));