过滤Google脚本中的数据透视表

时间:2017-08-21 16:55:40

标签: google-apps-script google-sheets pivot-table google-sheets-api

这是我在这里的第一篇文章,我是编码的新手。我的任务是创建一个自动报告,它会向谷歌表单提交者发送一个图表,以帮助他们监控他们的生产与他们的日常目标。为此,我使用新的开发人员Google工作表脚本来刷新数据透视表。我在网上找到了这个代码,但它很有用,但是,我想添加一行,根据唯一的提交者数据进行过滤。这是我到目前为止的代码:

function updatePivotTable() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var pivotTableSheetName = "Lunch Chart";
  var pivotTableSheetId = ss.getSheetByName(pivotTableSheetName).getSheetId();
  var fields = "sheets(properties.sheetId,data.rowData.values.pivotTable)";
  var sheets = Sheets.Spreadsheets.get(ss.getId(), {fields: fields}).sheets; 
  for (var i in sheets) {
  if (sheets[i].properties.sheetId == pivotTableSheetId) {
  var pivotTableParams = sheets[i].data[0].rowData[0].values[0].pivotTable;
  break;
}
}

// Update source range:
pivotTableParams.source.endRowIndex = 40;

// Send back the updated params
var request = {
"updateCells": {
  "rows": {
    "values": [{
      "pivotTable": pivotTableParams
    }]
  },
  "start": {
    "sheetId": pivotTableSheetId
  },
  "fields": "pivotTable"
}
};

Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}

这可能吗?我在哪里添加过滤器?我在谷歌开发者网站上发现了这个,但我对编码很新,所以我不知道该把它放在哪里或如何让它有条件。 https://developers.google.com/sheets/api/reference/rest/v4/FilterCriteria

谢谢!

2 个答案:

答案 0 :(得分:0)

我不确定这是否仍与您相关,但您可以使用以下代码添加过滤器 -

"criteria": {
            <col_index>: {"visibleValues": <filter criteria>},
            <col_index>: {"visibleValues": <filter criteria>},

答案 1 :(得分:0)

我遇到了同样的问题,没有找到简单的解释或代码。这是我所做的并且可以正常工作:

function updatePivotTable() {
  var ss = SpreadsheetApp.openById(SHEET_ID);
  var pivotTableSheetName = "Pivot";
  var pivotTableSheetId = ss.getSheetByName(pivotTableSheetName).getSheetId();
  
  var fields = "sheets(properties.sheetId,data.rowData.values.pivotTable)";
  var sheets = Sheets.Spreadsheets.get(ss.getId(), {fields: fields}).sheets; 
  for (var i in sheets) {
    if (sheets[i].properties.sheetId == pivotTableSheetId) {
      var pivotTableParams = sheets[i].data[0].rowData[0].values[0].pivotTable;
      break;
    }
  }
  
  // Update source range:
  pivotTableParams.source.endRowIndex = 111;
  pivotTableParams.criteria = { 3: {"visibleValues": ["foo"]}};
  
  // Send back the updated params
  var request = {
    "updateCells": {
      "rows": {
        "values": [{
          "pivotTable": pivotTableParams
        }]
      },
      "start": {
        "sheetId": pivotTableSheetId
      },
      "fields": "pivotTable",     
    }
  };
  
  Sheets.Spreadsheets.batchUpdate({'requests': [request]}, ss.getId());
}

因此,基本上,您需要将条件作为pivotTableParams传递,其中对象的键是要查询的列的索引,并且值应作为另一个对象传递,格式为{"visibleValues": ["foo"]}。 / p>