te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>google sheets - Using Script to Collapse Pivot Table Rows does not work without Manually Collapsing it First - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

google sheets - Using Script to Collapse Pivot Table Rows does not work without Manually Collapsing it First - Stack Overflow

programmeradmin3浏览0评论

I'm trying to collapse the rows of a pivot table within the sheet using @Tanaike's method: , but for some reason, the rows won't collapse if I don't manually collapse them first. Rows that I did not manually collapse will stay expanded. I'm using the exact same script here:

function myFunction() {
  var sheetName = "Sheet1"; // Please set your sheet name.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var sheet = ss.getSheetByName(sheetName);
  var sheetId = sheet.getSheetId();
  
  // Retrieve pivot table using Sheets API.
  var obj = Sheets.Spreadsheets.get(ssId, { ranges: [sheetName], fields: "sheets(data(rowData(values(pivotTable))))" }).sheets[0];

  // Create request body by expanding groups of rows.
  var requests = obj.data[0].rowData.reduce((ar, r, i) => {
    if (r.values) {
      r.values.forEach((c, j) => {
        if (c.pivotTable) {
          var pivotTable = c.pivotTable;
          ["rows"].forEach(e => { // If you want to expand both rows and columns, please use ["rows", "columns"].forEach(e => {
            if (pivotTable[e]) {
              pivotTable[e].forEach(pr => {
                if (pr.valueMetadata) {
                  pr.valueMetadata.forEach(vm => vm.collapsed = true);
                }
              });
              ar.push({
                updateCells: {
                  range: { sheetId, startRowIndex: i, endRowIndex: i + 1, startColumnIndex: j, endColumnIndex: j + 1 },
                  rows: [{ values: [{ pivotTable }] }],
                  fields: "pivotTable"
                }
              });
            }
          });
        }
      });
    }
    return ar;
  }, []);
  if (requests.length == 0) return;
  
  // Request the batchUpdate method of Sheets API.
  Sheets.Spreadsheets.batchUpdate({ requests }, ssId);
}

Am I missing something in the code? Here's the sample sheet: #gid=2100307022

I'm trying to collapse the rows of a pivot table within the sheet using @Tanaike's method: https://stackoverflow/a/76227150, but for some reason, the rows won't collapse if I don't manually collapse them first. Rows that I did not manually collapse will stay expanded. I'm using the exact same script here:

function myFunction() {
  var sheetName = "Sheet1"; // Please set your sheet name.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var sheet = ss.getSheetByName(sheetName);
  var sheetId = sheet.getSheetId();
  
  // Retrieve pivot table using Sheets API.
  var obj = Sheets.Spreadsheets.get(ssId, { ranges: [sheetName], fields: "sheets(data(rowData(values(pivotTable))))" }).sheets[0];

  // Create request body by expanding groups of rows.
  var requests = obj.data[0].rowData.reduce((ar, r, i) => {
    if (r.values) {
      r.values.forEach((c, j) => {
        if (c.pivotTable) {
          var pivotTable = c.pivotTable;
          ["rows"].forEach(e => { // If you want to expand both rows and columns, please use ["rows", "columns"].forEach(e => {
            if (pivotTable[e]) {
              pivotTable[e].forEach(pr => {
                if (pr.valueMetadata) {
                  pr.valueMetadata.forEach(vm => vm.collapsed = true);
                }
              });
              ar.push({
                updateCells: {
                  range: { sheetId, startRowIndex: i, endRowIndex: i + 1, startColumnIndex: j, endColumnIndex: j + 1 },
                  rows: [{ values: [{ pivotTable }] }],
                  fields: "pivotTable"
                }
              });
            }
          });
        }
      });
    }
    return ar;
  }, []);
  if (requests.length == 0) return;
  
  // Request the batchUpdate method of Sheets API.
  Sheets.Spreadsheets.batchUpdate({ requests }, ssId);
}

Am I missing something in the code? Here's the sample sheet: https://docs.google/spreadsheets/d/1Zsj-EcUY2G0n8fgJtgzz0kTwNDTU8ZqQ_W40s8SD3cM/edit?gid=2100307022#gid=2100307022

Share Improve this question edited 2 days ago vk26 asked Feb 17 at 15:47 vk26vk26 2281 silver badge9 bronze badges 1
  • @Patsytalk I've added the sample sheet. Thanks for the advice. – vk26 Commented 2 days ago
Add a comment  | 

1 Answer 1

Reset to default 1

Tanaike's script, as quoted in the question, doesn't collapse rows. It expands collapsed rows.

From Tanaike's answer:

If you want to collapse all row groups, please modify pr.valueMetadata.forEach(vm => vm.collapsed = false); to pr.valueMetadata.forEach(vm => vm.collapsed = true);

To toggle between expanded and collapsed, use this:

pr.valueMetadata.forEach(vm => vm.collapsed = !vm.collapsed);

The execution log of the script project in the sample spreadsheet has several errors like this:

"Exception: Service Google Sheets API has not been enabled for your Apps Script-managed Cloud Platform project."

The Sheets API seems to now have been enabled therein, but for subsequent readers: you need to click Services and enable the Sheets API for the code to work.

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论