- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
除了reportFilter之外,是否有任何过滤器可以应用于数据透视表。
pivotTable.getCTPivotTableDefinition().setFilters(filters);
如何使用上面的setFilters方法
最佳答案
要使用CTPivotTableDefinition.setFilters
方法,您需要首先创建一个org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFilters类型的
.filters
对象
让我们用一个完整的例子来说明这一点。
import java.io.FileOutputStream;
import org.apache.poi.ss.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.*;
import org.apache.poi.xssf.usermodel.*;
import java.util.GregorianCalendar;
class CreatePivotTableFilter {
public static void main(String[] args) throws Exception {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {
DataFormat format = workbook.createDataFormat();
CellStyle dateStyle = workbook.createCellStyle();
dateStyle.setDataFormat(format.getFormat("M\\/d\\/yy"));
Sheet sheet = workbook.createSheet();
String[] headers = new String[]{"Column1", "Column2", "Date", "Count"};
Row row = sheet.createRow(0);
Cell cell;
for (int c = 0; c < headers.length; c++) {
cell = row.createCell(c); cell.setCellValue(headers[c]);
}
Object[][] data = new Object[][]{
new Object[]{"A", "B1", new GregorianCalendar(2019, 0, 1), 2d},
new Object[]{"A", "B2", new GregorianCalendar(2019, 0, 1), 4d},
new Object[]{"B", "B1", new GregorianCalendar(2019, 0, 2), 1d},
new Object[]{"B", "B2", new GregorianCalendar(2019, 0, 2), 7d},
new Object[]{"A", "C1", new GregorianCalendar(2019, 0, 1), 5d},
new Object[]{"A", "C2", new GregorianCalendar(2019, 0, 1), 5d},
new Object[]{"B", "C1", new GregorianCalendar(2019, 0, 2), 2d},
new Object[]{"B", "C2", new GregorianCalendar(2019, 0, 2), 8d}
};
for (int r = 0; r < data.length; r++) {
row = sheet.createRow(r+1);
Object[] rowData = data[r];
for (int c = 0; c < rowData.length; c++) {
cell = row.createCell(c);
if (rowData[c] instanceof String) {
cell.setCellValue((String)rowData[c]);
} else if (rowData[c] instanceof GregorianCalendar) {
cell.setCellValue((GregorianCalendar)rowData[c]);
cell.setCellStyle(dateStyle);
} else if (rowData[c] instanceof Double) {
cell.setCellValue((Double)rowData[c]);
}
}
}
XSSFPivotTable pivotTable = ((XSSFSheet)sheet).createPivotTable(
new AreaReference("A1:D9",
SpreadsheetVersion.EXCEL2007),
new CellReference("F4"));
pivotTable.addRowLabel(0);
pivotTable.addRowLabel(1);
pivotTable.addColLabel(2);
pivotTable.addColumnLabel(DataConsolidateFunction.SUM, 3);
pivotTable.addColumnLabel(DataConsolidateFunction.AVERAGE, 3);
//create CTPivotFilters having filter for field 1 caption begins with "B"
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFilters filters =
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFilters.Factory.newInstance();
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFilter filter = filters.addNewFilter();
filter.setId(0);
filter.setFld(1);
filter.setType(org.openxmlformats.schemas.spreadsheetml.x2006.main.STPivotFilterType.CAPTION_BEGINS_WITH);
filter.setStringValue1("B");
filter.addNewAutoFilter().addNewFilterColumn().addNewCustomFilters().addNewCustomFilter().setVal("B*");
filter.getAutoFilter().setRef("A1");
filter.getAutoFilter().getFilterColumnArray(0).setColId(0);
//set filters to pivot table definition
pivotTable.getCTPivotTableDefinition().setFilters(filters);
workbook.write(fileout);
}
}
}
不幸的是,没有任何关于 ooxml 模式(apache poi
的低级基本对象)的公开文档。所以我们需要下载ooxml-schemas的源码然后通过 javadoc
形成这些内容以获得描述类和方法的 API
文档。
请注意,始终存在 CTPivotFilter
类型和值以及自定义过滤器值甚至运算符(如果需要)的组合。例如,要创建字段 1 标题的过滤器不等于“B2”的 CTPivotFilters
,需要:
...
//create CTPivotFilters having filter for field 1 caption not equal "B2"
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFilters filters =
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFilters.Factory.newInstance();
org.openxmlformats.schemas.spreadsheetml.x2006.main.CTPivotFilter filter = filters.addNewFilter();
filter.setId(0);
filter.setFld(1);
filter.setType(org.openxmlformats.schemas.spreadsheetml.x2006.main.STPivotFilterType.CAPTION_NOT_EQUAL);
filter.setStringValue1("B2");
filter.addNewAutoFilter().addNewFilterColumn().addNewCustomFilters().addNewCustomFilter().setVal("B2");
filter.getAutoFilter().getFilterColumnArray(0).getCustomFilters().getCustomFilterArray(0).setOperator(
org.openxmlformats.schemas.spreadsheetml.x2006.main.STFilterOperator.NOT_EQUAL
);
filter.getAutoFilter().setRef("A1");
filter.getAutoFilter().getFilterColumnArray(0).setColId(0);
...
关于java - 如何使用 Apache POI 使用 getFilter() 方法过滤数据透视表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58132247/
它显示相同的错误,但我尝试实现此功能。我不明白是什么造成了问题,因为它只是类中的另一个函数。我正在实现此功能,以将 SearchView 与 RecyclerAdapter 结合使用。我见过其他代码,
在过去使用 ArrayList 和 ArrayAdapter 填充 AutoCompleteTextView 的简单 Android 应用程序中,我现在用自定义适配器替换了 ArrayAdapter。
我对这个感到茫然,读了几篇文章后我仍然不知道如何处理我目前的情况。但是,当我过滤游标适配器时,列表不会更新或过滤任何内容,就像什么都没有发生一样。 这是我查看客户列表的 Activity public
我目前有一个带有 SearchView 的 RecyclerView,但不同之处在于,当我过滤主列表 (ArrayList) 时,我还需要更改其他两个单独的列表 (ArrayList>)。其他两个字符
在我的应用程序中,我从数据库中获取数据并在 ListView 中显示项目。我想为 listView 项目执行搜索选项。我正在从 BaseAdapter 获取项目。如何在自定义 BaseAdapter
截至目前,我有三个选项卡(可滚动),它们是带有 ActionBarActivity 实现 ActionBar.TabListener 的 fragment 我试图在按下搜索图标时添加搜索 View 功
我有一个如下所示的适配器,我使用 getFilter 方法来过滤 ListView 中的数据。它有效,但过滤后,只有过滤后的数据。我的意思是,例如,当我使用“test1”关键字过滤时,有 test1、
我正在尝试在基本适配器上实现 getFilter() 以过滤掉列表中的搜索结果。有没有关于如何实现 getFilter() 的示例? 主 Activity .java final AppInfo
这是我的主要 Activity package com.javacodegeeks.android.lbs; import android.os.Bundle; import android.app.
我试图在我的 ListView 中实现 getFilter() 函数,但每次我在 EditText 中输入一些内容时,我的 ListView 消失。 我的SetHelpRows 文件: public
我正在使用Custom ArrayAdapter 来存储用户信息,例如sammy、robert、lizie 都是用户对象,我正在使用用户类型ArrayList 来存储所有User 反对 ArrayLi
我一直在尝试实现对 listView 的简单搜索,我已经能够使用 Volley 填充它,但直到现在都无济于事。它一直标记这个 Cannot resolve method 'getFilter() 我也
我已经为自定义适配器实现了搜索功能,但仍然无法正常工作,如果有任何错误请纠正我,我已经发布了我的代码。 java代码 @Override public Filter getFilter() {
除了reportFilter之外,是否有任何过滤器可以应用于数据透视表。 pivotTable.getCTPivotTableDefinition().setFilters(
前提:我是 Java 和 Android 的新手,我对此进行了很多搜索,但我不明白如何在我的代码中实现 getFilter。 这是MainActivity(相关代码): public void loa
在我的应用程序中,我创建了一个自定义 ListView ,我想实现一个过滤器,以便可以根据在 EditText 中输入的文本来过滤列表。我将 BaseAdapter 用作单独的类。 这是我的适配器:
在此 Stackoverflow 中 answer , 这表明过滤可以在 ListView 中完成,而无需覆盖 ArrayAdapter 的 getFilter 方法,而是实现 toStringPOJ
在我的应用程序中,我创建了一个自定义 ListView ,我想实现一个过滤器,以便可以根据在 EditText 中输入的文本来过滤列表。我将 BaseAdapter 用作单独的类,并在我的主 Acti
我已经在 android 中创建了一个 ListView ,并且我已经通过使用 searchview 和 charsequence 作为参数来实现搜索过滤器 searchView.setOnQuery
本文整理了Java中org.eclipse.jst.j2ee.webapplication.WebApp.getFilters()方法的一些代码示例,展示了WebApp.getFilters()的具体
我是一名优秀的程序员,十分优秀!