Google apps script GoogleSpreadsheets的功能是按行和列名称从一个范围中获取单元格

Google apps script GoogleSpreadsheets的功能是按行和列名称从一个范围中获取单元格,google-apps-script,google-sheets,google-spreadsheet-api,Google Apps Script,Google Sheets,Google Spreadsheet Api,我有一个范围 idz01 idz04 ida02 foo a 1 b bar c 3 8 baz 8 2 g 我想从这个范围得到一些值,比如: SOME_FUNCTION(rangeID, 'foo', 'idz04') =LOOKUPGRID(A1:D4,"foo","idz04") 要获取1等,或者理想情况下,要获取单元格: INDIRECT(SOME_FUNCTION(rangeID,

我有一个范围

      idz01  idz04  ida02
foo     a      1      b
bar     c      3      8
baz     8      2      g
我想从这个范围得到一些值,比如:

SOME_FUNCTION(rangeID, 'foo', 'idz04')
=LOOKUPGRID(A1:D4,"foo","idz04")
要获取
1
等,或者理想情况下,要获取单元格:

INDIRECT(SOME_FUNCTION(rangeID, 'foo', 'idz04'))
或诸如此类

有这样的事吗?可以使用
GETPIVOTDATA()
进行此操作吗

编辑: 如果我能够得到
结果范围
,我可以采用
查找

LOOKUP("foo", DataRange, 
    FIRST_COL(
        OFFSET(DataRange, 
            MATCH("idz04", FIRST_ROW(DataRange), 0)
        )
    )
)

只是,我没有
第一行()
第一列()。。。也许
FILTER()
会有所帮助?

为此,您可以使用Google Apps脚本编写自定义函数。查看此项了解更多详细信息

您可以使用名称或id访问电子表格,并获取值的范围(在您的示例中为单元格)


希望有帮助

为此,您可以使用Google Apps脚本编写自定义函数。查看此项了解更多详细信息

您可以使用名称或id访问电子表格,并获取值的范围(在您的示例中为单元格)


希望有帮助

试试这个,你只需要设置范围:

=INDEX("Talbe",MATCH("foo","First Column",0),MATCH("idz04","First Row",0))
例如,如果您的表格在A1:D4范围内,请使用:

=INDEX(A1:D4,MATCH("foo",A:A,0),MATCH("idz04",1:1,0))
还可以使用命名范围


要自动获取第一列和第一行,请使用以下公式:

=INDEX(data,MATCH("foo",INDIRECT(CHAR(64+COLUMN(data))&":"&CHAR(64+COLUMN(data))),0),MATCH("idz04",INDIRECT(COLUMN(data)&":"&COLUMN(data)),0))

要通过脚本执行此操作,请使用以下代码:

function LOOKUPGRID(data, rowHeader, colHeader) {
  for (var i = 0; i<data.length;i++) {
    if (data[i][0] === rowHeader) {
      for (var j = 0; j<data[0].length;j++) {
        if (data[0][j] === colHeader) {
          return (data[i][j]);
        }
      }
    }
  }
  return (null)
}

尝试此操作,您只需设置范围:

=INDEX("Talbe",MATCH("foo","First Column",0),MATCH("idz04","First Row",0))
例如,如果您的表格在A1:D4范围内,请使用:

=INDEX(A1:D4,MATCH("foo",A:A,0),MATCH("idz04",1:1,0))
还可以使用命名范围


要自动获取第一列和第一行,请使用以下公式:

=INDEX(data,MATCH("foo",INDIRECT(CHAR(64+COLUMN(data))&":"&CHAR(64+COLUMN(data))),0),MATCH("idz04",INDIRECT(COLUMN(data)&":"&COLUMN(data)),0))

要通过脚本执行此操作,请使用以下代码:

function LOOKUPGRID(data, rowHeader, colHeader) {
  for (var i = 0; i<data.length;i++) {
    if (data[i][0] === rowHeader) {
      for (var j = 0; j<data[0].length;j++) {
        if (data[0][j] === colHeader) {
          return (data[i][j]);
        }
      }
    }
  }
  return (null)
}

试图写我自己的函数

/**
 * Returns [Range] the cell value at coordinates determined by the values first row (colHeader) and first column (rowHeader) in given range.
 */ 
function LOOKUP_GRID(range, colHeader, rowHeader){
  for(var col = range.getWidth()-1; col--; col  >= 0 )
    if(range.getCell(1, col).getValue() === colHeader)
      break;
  for(var row = range.getHeight()-1; row--; row  >= 0 )
    if(range.getCell(row, 1).getValue() === rowHeader)
      break;

  if(col === -1 || row === -1)
    return null;
  else
    return range.getCell(row, column)
}

试图写我自己的函数

/**
 * Returns [Range] the cell value at coordinates determined by the values first row (colHeader) and first column (rowHeader) in given range.
 */ 
function LOOKUP_GRID(range, colHeader, rowHeader){
  for(var col = range.getWidth()-1; col--; col  >= 0 )
    if(range.getCell(1, col).getValue() === colHeader)
      break;
  for(var row = range.getHeight()-1; row--; row  >= 0 )
    if(range.getCell(row, 1).getValue() === rowHeader)
      break;

  if(col === -1 || row === -1)
    return null;
  else
    return range.getCell(row, column)
}
下面是:

=INDEX(ObjednavkyData, 
   // Find the offset of "vesela01" in the 1st column
   MATCH("vesela01",
     OFFSET((ObjednavkyData),0,0,
        MAX(ARRAYFORMULA(ROW(ObjednavkyData)))  // Num of rows in the range
     , 1)
   ,0), 
   // Find the offset of "z03" in the 1st row
   MATCH("z03", 
     OFFSET(ObjednavkyData, 0 , 0, 1)  // First row
   , 0)) 
不太整洁:p
另请参见以下内容:

=INDEX(ObjednavkyData, 
   // Find the offset of "vesela01" in the 1st column
   MATCH("vesela01",
     OFFSET((ObjednavkyData),0,0,
        MAX(ARRAYFORMULA(ROW(ObjednavkyData)))  // Num of rows in the range
     , 1)
   ,0), 
   // Find the offset of "z03" in the 1st row
   MATCH("z03", 
     OFFSET(ObjednavkyData, 0 , 0, 1)  // First row
   , 0)) 
不太整洁:p

另请参见

这非常好。我是否可以自动获取第一列和第一行?这样我就不必减去范围的偏移量:
MATCH(“z04”,1:1,0)-1)
知道了,看另一个答案。这很好。我是否可以自动获取第一列和第一行?这样我就不必减去范围的偏移量:
MATCH(“z04”,1:1,0)-1)
明白了,请参见另一个答案。