首页 > 解决方案 > 如何在 App Script 中将数据透视表值表示为列总数的百分比?

问题描述

所以我有代码可以在数据透视表中表达我的电子表格数据,但我需要将这些值显示为列总数的百分比。似乎有一个属性可以实现该结果,但我不知道如何将其集成到脚本中。

https://developers.google.com/apps-script/reference/spreadsheet/pivot-value-display-type

    function addPivotTable3(spreadsheetId3, pivotSourceDataSheetId3, destinationSheetId3) 
{
    var ss = SpreadsheetApp.getActiveSpreadsheet();

  var sheetName = "Sheet3";

  var pivotTableParams = {};

  // The source indicates the range of data you want to put in the table.
  // optional arguments: startRowIndex, startColumnIndex, endRowIndex, endColumnIndex
  pivotTableParams.source = {
    sheetId: ss.getSheetByName(sheetName).getSheetId()
  };

  // Group rows, the 'sourceColumnOffset' corresponds to the column number in the source range
  // eg: 0 to group by the first column
  pivotTableParams.rows = [{
    sourceColumnOffset: 2,
    sortOrder: "ASCENDING"
  }];

  // Defines how a value in a pivot table should be calculated.
  pivotTableParams.values = [{
    summarizeFunction: "SUM",
        displayType: "PERCENT_OF_COLUMN_TOTAL",     
    sourceColumnOffset: 3
  }];


  var requests = [{
    'updateCells': {
      'rows': {
        'values': [
          {
            'pivotTable': {
              'source': {
                'sheetId': pivotSourceDataSheetId3,
                'startRowIndex': 0,
                'startColumnIndex': 0,
                'endRowIndex': 94,
                'endColumnIndex': 4,
              },
              'rows': [
                {
                  'sourceColumnOffset': 2,
                  'showTotals': true,
                  'sortOrder': 'ASCENDING',
                  'valueBucket': {
                    'buckets': [
                      {
                        'stringValue': 'BAE Stages',
                      },
                    ],
                  },
                },
                      {
                  'sourceColumnOffset': 94,
                  'showTotals': true,
                  'sortOrder': 'ASCENDING',
                  'valueBucket': {},
                },
              ],
              'columns': [
                {
                  'sourceColumnOffset': 0,
                  'sortOrder': 'ASCENDING',
                  'showTotals': true,
                  'valueBucket': {},
                },
              ],
              'values': [
                {
                  'summarizeFunction': "SUM",
                  'sourceColumnOffset': 3,
                  //'displayType': "PERCENT_OF_COLUMN_TOTAL",
                  //This line triggers a JSON erorr


                },
              ],
              'valueLayout': 'HORIZONTAL', 

            },

          },
        ],
      },
      'start': {
        'sheetId': destinationSheetId3,
        'rowIndex': 0,
        'columnIndex': 0,
      },
      'fields': 'pivotTable',
    },
  }];

  var response =
      Sheets.Spreadsheets.batchUpdate({'requests': requests}, spreadsheetId3);

}

标签: google-apps-scriptgoogle-sheets

解决方案


好吧,我也不知道,文档太神秘了。

我正要放弃然后我遇到了这个:https ://developers.google.com/sheets/api/reference/rest/v4/spreadsheets#PivotValueCalculatedDisplayType

最终我计算出你的线路应该是:

              'calculatedDisplayType' : "PERCENT_OF_COLUMN_TOTAL",

(在上面的网页上PivotValueCalculatedDisplayType 和表格中是你提到的 ENUM,“PERCENT_OF_COLUMN_TOTAL”我有一种预感,因为我们在对象的数据透视表/值部分,我们不需要 PivotValue ......所以我们'重新留下计算的DisplayType。

呸。


推荐阅读