Google sheets 生成像Q,R,S…AB这样的字符串,其中AB是googlesheet中的最后一列
我有一个复杂的谷歌工作表查询,除了当谷歌工作表没有我在公式中使用的那么多列时,它工作得很好 下面是公式现在的样子:Google sheets 生成像Q,R,S…AB这样的字符串,其中AB是googlesheet中的最后一列,google-sheets,Google Sheets,我有一个复杂的谷歌工作表查询,除了当谷歌工作表没有我在公式中使用的那么多列时,它工作得很好 下面是公式现在的样子: =sumfilterqueryINDIRECT'&A2&'$A$7:$23,选择Q、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH,其中B='&C2&',0,QueryDirect'&A2&'$A$7:$23,选择Q、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH,其中B='PROJECT',0>=date20
=sumfilterqueryINDIRECT'&A2&'$A$7:$23,选择Q、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH,其中B='&C2&',0,QueryDirect'&A2&'$A$7:$23,选择Q、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH,其中B='PROJECT',0>=date2017,1,1,QueryDirect'&A2&'$A$7:$23,选择Q、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH,其中B='PROJECT',0这可以通过脚本完成。如果没有看到您的电子表格,很难确切地知道您需要什么,但这应该很接近。我从Sheet1中获取变量,并将公式返回到Sheet1。调整图纸名称以满足您的需要。这将根据变量表名查看数据表,确定最后一列。确定列字母并生成查询所需的字符串。然后设置新的查询公式。我添加了一个菜单来运行它
function onOpen() {
SpreadsheetApp.getActiveSpreadsheet().addMenu(
'Create Data', [
{ name: 'Run', functionName: 'formula' },
]);
}
function formula(){
var ss= SpreadsheetApp.getActiveSpreadsheet()
var s=ss.getSheetByName("Sheet1") //sheet where variables are
var sheet=s.getRange("A2").getValue()//variable sheet name
var sel=makeString(sheet) //get the select string of column letters
//Create formula and return to Sheet1 A3
var f= s.getRange("A3").setFormula('=sum(filter(query(INDIRECT("\'" & A2 & "\'!$A$7:$23"),"select '+sel+' where B=\'"&C2&"\'",0),query(INDIRECT("\'" & A2 & "\'!$A$7:$23"),"select '+sel+' where B=\'PROJECT\'",0) >=date(2017,1,1),query(INDIRECT("\'" & A2 & "\'!$A$7:$23"),"select '+sel+' where B=\'PROJECT\'",0) <=date(2017,12,31)))')
}
function makeString(sht){
var ss= SpreadsheetApp.getActiveSpreadsheet()
var s=ss.getSheetByName(sht)
var lc=s.getLastColumn()
var rng=s.getRange(1, 17, 1, lc).getValues()
var str=''
var ltr=[]
for(var i=17;i<rng[0].length+1;i++){
ltr[i]= columnToLetter(i)
str=ltr.join(',')
}
var str1=str.substr(17)
return str1
}
function columnToLetter(column)
{
var temp, letter = '';
while (column > 0)
{
temp = (column - 1) % 26;
letter = String.fromCharCode(temp + 65) + letter;
column = (column - temp - 1) / 26;
}
return letter;
}
如果您有任何问题,请告诉我。这可以通过内置功能完成: 在助手表上,假设您命名它,helper,用字母a到Z填充范围,比如A1:A26 假设在B1上写下以下公式: =数组公式{A1:A26;TRANSPOSESPLITJOIN,,SubstituteEqualyTransposeA1:A26&A1:A26,,27,,,,}。这将创建列字母标题的列表。 在每个新工作表上,使用columns1:1获得总列数。 要获取列标题的字符串,可以使用以下内容: 加入,离开服务器!B1,16,0,第1:1-16列 QUERYhelper!B:B,选择B限制和列1:1-7和偏移7 注: 如果您决定只使用一个帮助表并在多个电子表格上使用它,那么使用
QueryImportRange您的url,助手!B:B,根据上述注释选择列1限制和列1:1-7和偏移量7,最终公式为: 左Q、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH、AI、AJ、AK、A五十、 上午、下午、下午、下午、下午、下午、下午,AS,AT,AU,AV,AW,AX,AY,AZ,BA,BB,BC,2*列直接A2&!1:1-33+IFColumnsINDIRECTA2&!1:1>26,柱状NDIRECTA2&!1:1-26,0
其中A列包含Google工作表中的工作表选项卡列表。把这个放进B2,然后把它抄下来。我没有将此标记为正确答案,因为其他人给出了基于公式的正确答案,但这为我做到了。谢谢大家。它非常有用,我可以在另一个项目中使用它。对于这一点,我只是尝试用公式。谢谢,鲁本。我试图避免在侧面或辅助表上添加数据。我以前意识到我可以构建一个两列的表,在这里我可以得到ColumnsINDIRECTA2的列数&!1:1其中A2有工作表名称值,然后在表上进行查找,其中第一列是列,第二列是字符串,如Q、Q、R、R、S等。最后,我将使用一个解决方案,使用LEFT获得我需要的这一长字符串的部分:Q、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH、AI、AJ、AK、AL、am、AN、AO、AP、AQ、AR、AS、AT、AU、AV、AW,AX,AY,AZ,BA,BB,BC。一旦我知道了一张表中的列,我就可以得到那张表的正确字符串,我只需要假设没有一张表会超过BC,我非常确定。但我很感激你的解决方案,从中我学到了很多。谢谢你。由于您按照要求使用公式进行了求解,我将您的公式标记为一个解决方案并结束此问题。我怀疑其他人是否需要此解决方案,但以下是通过左命令获取的字符数公式:IFB2>26,3*B2-59,2*B2-33,其中B列值包含列sindirecta2的结果&!给出任何给定工作表中列数的1:1公式。因此第2行的最终公式是LEFTQ、R、S、T、U、V、W、X、Y、Z、AA、AB、AC、AD、AE、AF、AG、AH、AI、AJ、AK、AL、AM、AN、AO、AP、AQ、AR、AS、AT、AU、AV、AW、AX、AY、AZ、BA、BB、BC、2*列!1:1-33+IFColumnsINDIRECTA2&!1:1>26,列直接2&!1:1-26,0@user1883779请考虑将您的解决方案作为回应。