Как отсортировать сводную таблицу в Aspose по значениям поля строки и столбца?

Пожалуйста, найдите изображение ниже, демонстрирующее, что именно я хочу сделать.

Демонстрация примера использования сводной таблицы

Я попытался сделать это в приведенном ниже коде, но он не создает правильный/читаемый файл Excel. В качестве альтернативы, если я использую закомментированный код, он создает правильный файл Excel, но не сортирует правильно, как ожидалось.

Не могли бы вы помочь мне достичь цели, упомянутой на изображении выше.

  String sortByColName = "OrderDate";
  String sortByRowName = "CategoryName";

  PivotFieldCollection colFields = pivotTable.getColumnFields();
  PivotFieldCollection rowFields = pivotTable.getRowFields();

  PivotField sortByColField = colFields.get(sortByColName);

  sortByColField.setAutoSort(true);
  sortByColField.setAscendSort(true);
  sortByColField.setAutoSortField(2); /* sortByColField.setAutoSortField(-1); */
  sortByColField.setAutoShow(true);
  sortByColField.setAscendShow(true);
  sortByColField.setAutoShowField(0);

  PivotField sortByRowField = rowFields.get(sortByRowName);
  sortByRowField.setAutoSort(true);
  sortByRowField.setAscendSort(true);
  sortByRowField.setAutoSortField(2); /* sortByRowField.setAutoSortField(-1); */
  sortByRowField.setAutoShow(true);
  sortByRowField.setAscendShow(true);
  sortByRowField.setAutoShowField(0)

person Hitesh Dholaria    schedule 11.04.2016    source источник


Ответы (1)


Поскольку вам требуется настроить сортировку на основе определенных значений/области в отчете сводной таблицы, поэтому вы не можете добиться этого напрямую с помощью параметров сводной таблицы, вы можете подтвердить это в MS Excel вручную. Боюсь, вам нужно сначала создать свою сводную таблицу с помощью API-интерфейсов Aspose.Cells, затем вам нужно обновить сводную таблицу с ее данными (т.е. использовать PivoTable.refreshData() и PivotTable.calculateData() и т. д.), поэтому Aspose.Cells следует вставить/отобразить отчет сводной таблицы в ячейки рабочего листа. Теперь используйте общую функцию сортировки данных (см. документ для справки: http://www.aspose.com/docs/display/cellsjava/Data+Sorting), чтобы отсортировать нужную область (используя параметры сверху вниз или слева направо) соответствующим образом через API Aspose.Cells. Это не так просто, потому что сначала нужно выяснить, какую область или часть области (строку или столбец) нужно отсортировать. Здесь вы можете использовать параметры поиска/поиска, предоставляемые API Aspose.Cells.

Если вы все еще считаете, что такую ​​пользовательскую сортировку можно выполнить непосредственно с помощью параметров сводной таблицы в MS Excel, пожалуйста, создайте желаемую сводную таблицу вручную в MS Excel, сохраните файл Excel и предоставьте нам в своем thread, мы проверим и поможем вам в ближайшее время там.

Я работаю разработчиком поддержки / евангелистом в Aspose.

person Amjad Sahi    schedule 11.04.2016
comment
Спасибо @Amjad за правильное направление! Я внес соответствующие изменения, как вы предложили, но все равно не создает ожидаемого Excel. На самом деле я сохраняю свою текущую книгу в объект ByteArrayOutputStream, а не в файл (я не могу изменить API кода). Более того, я сортирую одну и ту же книгу дважды (по вертикали и по горизонтали). Поскольку это часть одного и того же запроса, я не уверен, что смогу добиться того, чего хотел, в одном запросе/потоке. Пожалуйста, направляйте меня дальше! - person Hitesh Dholaria; 12.04.2016
comment
Ну, сохранение книги в потоки или путь к файлу не должно иметь никакого значения. Мы рекомендуем вам следить за вашей темой (aspose.com/community/forums/thread/712040/) для справки. - person Amjad Sahi; 12.04.2016